Я хочу манипулировать массивом 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.
Код будет выглядеть примерно так:
var myJSONText = JSON.stringify(myObject);
Так
['Location Zero', 'Location One', 'Location Two'];
Станет:
"['Location Zero', 'Location One', 'Location Two']"
Вам нужно будет обратиться к гуру PHP о том, как справиться с этим на сервере. Я думаю, что другие ответы здесь интимное решение.
Данные могут быть возвращены с сервера аналогичным образом. Т.е. вы можете вернуть его обратно в объект.
var myObject = JSON.parse(myJSONString);
Я знаю, что может быть слишком поздно, чтобы ответить на это, но это сработало для меня великолепно:
Сгладьте свой javascript-объект (json) с помощью var st = JSON.stringify(your_object);
Передайте данные POST как «string» (возможно, используя jQuery: $.post('foo.php',{data:st},function(data){... });
$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';