Ответ 1
data: { activitiesArray: activities },
Что это! Теперь вы можете получить доступ к нему в PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
Я хочу манипулировать массивом JavaScript в PHP. Можно ли сделать что-то подобное?
$.ajax({
type: "POST",
url: "tourFinderFunctions.php",
data: "activitiesArray="+activities,
success: function() {
$("#lengthQuestion").fadeOut('slow');
}
});
Действия - это одномерный массив, например:
var activities = ['Location Zero', 'Location One', 'Location Two'];
script не завершается, когда я пытаюсь это сделать... Как его исправить?
data: { activitiesArray: activities },
Что это! Теперь вы можете получить доступ к нему в PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
Вам нужно будет закодировать ваш массив как JSON перед его отправкой, или вы просто получите некоторый барахл на другом конце.
Поскольку все, что вы отправляете, это массив, вы можете просто сделать:
data: { activities: activities }
который автоматически преобразует массив для вас.
Подробнее см. здесь.
Вам нужно превратить это в строку. Вы можете сделать это, используя метод stringify в библиотеке JSON2.
Код выглядит примерно так:
var myJSONText = JSON.stringify(myObject);
So
['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 как "строка" (возможно, используя jQuery: $.post('foo.php',{data:st},function(data){... });
$data = json_decode($_POST['data']);
Чтобы он... вы можете свободно использовать свои данные.
Многомерные массивы и одиночные массивы обрабатываются как обычные массивы. Для доступа к ним просто выполните обычный $foo[4]
.
Ассоциативные массивы (объекты javsacript) обрабатываются как объекты php (классы). Для доступа к ним просто делайте это как классы: $foo->bar
.
Я должен быть таким:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
function(response, status, xhr) {
alert("POST returned: \n" + response + "\n\n");
})
Используйте функцию JQuery Serialize
http://docs.jquery.com/Ajax/serialize
Сериализация обычно используется для подготовки данные пользователя, которые должны быть отправлены на сервер. Сериализованные данные находятся в стандартный формат совместим почти со стороны сервера языки программирования и рамки.
Это сработало для меня:
$.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';
Это потому, что PHP читает ваше значение в виде строки. Если я не хочу передавать свои данные как объект (как в предыдущих ответах, что тоже хорошо), я просто делаю это на своем PHP:
$activitiesString = $_POST['activitiesArray'];
$activitiesArray = (explode(",",$activitiesString));
Последняя строка разбивает строку на биты после каждой запятой. Теперь $ actionsArray также является массивом. Это работает, даже если нет запятой (только один элемент в вашем массиве javascript).
Удачного кодирования!