Передача массива JavaScript на PHP через jQuery $ .ajax

Я хочу манипулировать массивом JavaScript в PHP. Можно ли сделать что-то подобное?

$.ajax({ type: "POST", url: "tourFinderFunctions.php", data: "activitiesArray="+activities, success: function() { $("#lengthQuestion").fadeOut('slow'); } }); 

Деятельность представляет собой одномерный массив, такой как:

 var activities = ['Location Zero', 'Location One', 'Location Two']; 

Сценарий не завершается, когда я пытаюсь это сделать … Как его исправить?

 data: { activitiesArray: activities }, 

Это оно! Теперь вы можете получить доступ к нему в PHP:

 <?php $myArray = $_REQUEST['activitiesArray']; ?> 

Вы хотите закодировать свой массив как JSON перед его отправкой, иначе вы просто получите некоторый барахл на другом конце.

Поскольку все, что вы отправляете, это массив, вы можете просто сделать:

 data: { activities: activities } 

который автоматически преобразует массив для вас.

Подробнее см. Здесь .

Вам нужно превратить это в строку. Вы можете сделать это, используя метод stringify в библиотеке JSON2.

http://www.json.org/

http://www.json.org/js.html

Код будет выглядеть примерно так:

 var myJSONText = JSON.stringify(myObject); 

Так

 ['Location Zero', 'Location One', 'Location Two']; 

Станет:

 "['Location Zero', 'Location One', 'Location Two']" 

Вам нужно будет обратиться к гуру PHP о том, как справиться с этим на сервере. Я думаю, что другие ответы здесь интимное решение.

Данные могут быть возвращены с сервера аналогичным образом. Т.е. вы можете вернуть его обратно в объект.

 var myObject = JSON.parse(myJSONString); 

Я знаю, что может быть слишком поздно, чтобы ответить на это, но это сработало для меня великолепно:

  1. Сгладьте свой javascript-объект (json) с помощью var st = JSON.stringify(your_object);

  2. Передайте данные POST как «string» (возможно, используя jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Расшифруйте свои данные при обработке на стороне сервера: $data = json_decode($_POST['data']);

Вот и все … вы можете свободно использовать свои данные.

Многомерные массивы и одиночные массивы обрабатываются как обычные массивы. Для доступа к ним просто выполните обычный $foo[4] .

Ассоциативные массивы (объекты javsacript) обрабатываются как объекты (классы) php. Для доступа к ним просто делайте это как классы: $foo->bar .

Используйте функцию JQuery Serialize

http://docs.jquery.com/Ajax/serialize

Сериализация обычно используется для подготовки пользовательских входных данных для публикации на сервере. Сериализованные данные находятся в стандартном формате, который совместим практически со всеми языками и фреймами на стороне сервера .

Я должен быть так:

 $.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer }, function(response, status, xhr) { alert("POST returned: \n" + response + "\n\n"); }) 

Это сработало для меня:

 $.ajax({ url:"../messaging/delete.php", type:"POST", data:{messages:selected}, success:function(data){ if(data === "done"){ } info($("#notification"), data); }, beforeSend:function(){ info($("#notification"),"Deleting "+count+" messages"); }, error:function(jqXHR, textStatus, errorMessage){ error($("#notification"),errorMessage); } }); 

И это для вашего PHP :

 $messages = $_POST['messages'] foreach($messages as $msg){ echo $msg; } 

Используйте встроенную функциональность PHP для добавления операнда массива в нужное имя переменной.

Если мы добавим значения в массив Javascript следующим образом:

 acitivies.push('Location Zero'); acitivies.push('Location One'); acitivies.push('Location Two'); 

Его можно отправить на сервер следующим образом:

 $.ajax({ type: 'POST', url: 'tourFinderFunctions.php', 'activities[]': activities success: function() { $('#lengthQuestion').fadeOut('slow'); } }); 

Обратите внимание на цитаты вокруг действий []. Значения будут доступны следующим образом:

 $_POST['activities'][0] == 'Location Zero'; $_POST['activities'][1] == 'Location One'; $_POST['activities'][2] == 'Location Two';