2012-06-21 2 views
1

Я рассмотрел несколько других предложений по этой проблеме, но по какой-то причине мои данные не публикуются. Вот соответствующий раздел моего кода:Передача массива с Javascript на PHP через POST

<input type="button" id="map_submit" value="Map Selection" /> 
<?php var_dump($_POST); ?> // display the posted variables 

и

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#map_submit').click(function(){ 

      /* this part is from the slickgrid plugin, in which 
      * selectedData is an array that I want to post to the page 
      * and read via php 
      */ 
      var selectedData = [], selectedIndexes; 
      selectedIndexes = grid.getSelectedRows(); 
      jQuery.each(selectedIndexes, function (index, value) { 
       selectedData.push(grid.getData()[value]); 
      }); 

      $.post("mapper.php", {dataArray: selectedData}); 
     }); 
    }); 
</script> 

Из того, что я видел из других вопросов, $.post должен работать. Но, когда я нажимаю кнопку, ничего не отображается из var_dump. В качестве проверки вменяемости, если я добавлю это в JavaScript:

for (var i = 0; i < selectedData.length; i++) { 
    document.write(selectedData[i].questionID + "<br />"); 
} 

будет печатать questionID значения I, выбранных в сетке (конечно, чтобы вновь пустую страницу).

+0

возможно дубликат [Пасс Javascript Array -> PHP] (http://stackoverflow.com/questions/5035547/pass-javascript-array-php) –

+1

Что показывает, если вы console.log (selectedData) ; перед .post? – somedev

+2

Подождите, эти фрагменты кода в одном файле? Если они тогда появляются, вы ожидаете, что часть PHP будет работать на стороне клиента. Это не работает. Вам нужно обратный вызов на '$ .post', чтобы что-то сделать с возвращенными данными. – Cfreak

ответ

2
$.post("mapper.php", {dataArray: selectedData}); 

Эта линия хорошо. Я не знаю, почему все предлагают JSON, потому что здесь нет необходимости. Вы можете просто объекты POST/массивы, не используя JSON.

Примечание: это будет не перезагрузите страницу. Он будет POST до mapper.php через AJAX, поэтому ничего не увидит на странице. Вам нужно будет посмотреть в своих инструментах dev, чтобы узнать, что вызвал вызов AJAX.

Или вы можете проверить данные, которые возвращает POST.

$.post("mapper.php", {dataArray: selectedData}, function(data){ 
    console.log(data); // check your console, you should see some output 
}); 
+0

А, да. На консоли отображается вся страница html. Итак, в принципе, я не могу отправить массив из jquery в php на той же странице? – Aaron

+1

@Aaron: PHP работает на сервере. Он выводит HTML-страницу, отображаемую вашим браузером. После того, как страница находится в вашем браузере, PHP работает. Итак, вам нужно загрузить новую страницу для отправки данных POST. Поскольку вы используете AJAX, я предлагаю создать новую страницу PHP, POSTing там данные, а затем вернуть данные на вашу страницу. –

+0

Итак, могу ли я просто поместить весь код подключения к базе данных на отдельную страницу PHP, поэтому, когда он POSTs обновляет базу данных (если выбрана опция Data), получает новые результаты, а затем jquery должен будет принять этот результат и обновить сетки? – Aaron

1

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

Пример ниже (требуется json2.js):

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#map_submit').click(function(){ 

      /* this part is from the slickgrid plugin, in which 
      * selectedData is an array that I want to post to the page 
      * and read via php 
      */ 
      var selectedData = [], selectedIndexes; 
      selectedIndexes = grid.getSelectedRows(); 
      jQuery.each(selectedIndexes, function (index, value) { 
       selectedData.push(grid.getData()[value]); 
      }); 

      $.post("mapper.php", JSON.stringify({dataArray: selectedData})); 
     }); 
    }); 
</script> 

<input type="button" id="map_submit" value="Map Selection" /> 
<?php var_dump(json_decode($_POST, true)); ?> // display the posted variables 
+0

Зачем вам нужно 'JSON.stringify'? Что случилось с использованием обычных данных POST? Плюс я не уверен, что 'json_decode ($ _ POST, true)' будет даже работать. Вам нужно будет прочитать необработанные данные POST. 'json_decode (file_get_contents ('php: // input'), true)' –

+0

Я также не уверен, что '$ .post' позволит вам отправить такую ​​строку JSON. –

+0

@Rocket: JSON.stringify - это сериализовать объект JavaScript в кодированную JSON строку, которая затем может быть отправлена ​​на сервер. Хотя jQuery имеет функцию '$ .parseJSON', по какой-то причине команда разработчиков jQuery пренебрегла включением функции' stringify'. 'json_decode ($ _ POST, true)' - это пример из http://php.net/manual/en/function.json-decode.php, показывающий, как взять строку в кодировке JSON и десериализовать ее на стороне сервера. – pete

Смежные вопросы