передать массив из jQuery в PHP (и фактически перейти на страницу после отправки)

Кажется, это было бы просто, но то, что я делал, это создание массива в jQuery и отправка его на php через ajax и вставка записей в db. Но теперь я хочу сделать массив точно таким же, но вместо ajax я бы хотел перейти на страницу php и посмотреть, что он получил.

Как мне это сделать?

Я использую этот jQuery:

$('#preview').live('click',function(){ var postData = {}; $('#items tr').not(':first').each(function(index, value) { var keyPrefix = 'data[' + index + ']'; postData[keyPrefix + '[index]'] = index; postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text(); postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text(); postData[keyPrefix + '[om_part_no]'] = $(this).closest('tr').find('.om_part_no').text(); postData[keyPrefix + '[description]'] = $(this).closest('tr').find('.description').text(); postData[keyPrefix + '[quantity_input]'] = $(this).closest('tr').find('.quantity_input').val(); postData[keyPrefix + '[cost_of_items]'] = $(this).closest('tr').find('.cost_of_items').text(); postData[keyPrefix + '[cost_total_td]'] = $(this).closest('tr').find('.cost_total_td').text(); }); $.ajax ({ type: "POST", url: "preview.php", dataType: "json", data: postData, cache: false, success: function() { } }); }); 

И этот PHP:

 if (isset($_POST['data']) && is_array($_POST['data'])) { foreach ($_POST['data'] as $row => $data) { echo $data['index']; echo $data['project_ref']; echo $data['supp_short_code']; echo $data['om_part_no']; echo $data['description']; echo $data['quantity_input']; echo $data['cost_of_items']; echo $data['cost_total_td']; } } 

Что вы можете сделать, следуя тому, что сказал dnagirl , – это сгенерировать форму POST с помощью jQuery и отправить ее.

 $('#preview').live('click',function(){ var cForm = $('<form method="post">').attr('action', "preview.php"); $('#items tr').not(':first').each(function(index, value) { var keyPrefix = 'data[' + index + ']'; cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[index]').val(index)); cForm.append($('<input type="hidden">').attr('name', keyPrefix + '[supp_short_code]').val($(this).closest('tr').find('.supp_short_code').text()); // etc }); cForm.hide().append('body').submit(); return false; }); 

Причина использования attr () в местах, а не в строке внутри строки создания, заключается в том, чтобы избежать проблем с экранированием, и, на мой взгляд, он выглядит более чистым.

Вы можете сохранить полученные данные в сеансе:

 if (isset($_POST['data']) && is_array($_POST['data'])) { session_start(); $_SESSION['data'] = $_POST['data']; } 

Затем перейдите на другую страницу PHP, которая извлекает данные из сеанса и отображает их:

 session_start(); if (isset($_SESSION['data']) && is_array($_SESSION['data'])) { foreach ($_SESSION['data'] as $row => $data) { echo $data['index']; echo $data['project_ref']; echo $data['supp_short_code']; echo $data['om_part_no']; echo $data['description']; echo $data['quantity_input']; echo $data['cost_of_items']; echo $data['cost_total_td']; } } 

Почему бы не использовать JSON

PHP JSON

Таким образом, вы в настоящее время создаете строку POST с помощью jQuery, а затем отправляете ее с помощью ajax в php-скрипт. Теперь вы действительно хотите POST прямо на PHP. Это верно?

Если у меня все получится, есть два варианта:

  1. фактически POST из формы, которую пользователь заполняет
  2. имеют скелетную форму, состоящую из тегов <form> и кнопки отправки. Используйте jQuery для создания и заполнения скрытых полей формы, когда пользователь нажимает кнопку отправки и до того, как действие отправки будет завершено.