Как я могу отправить массив в php через ajax?
-
08-07-2019 - |
Вопрос
Я хочу отправить массив, построенный в javascript с выбранными значениями множественного выбора. Есть ли способ отправить этот массив в скрипт php, используя ajax?
Решение
Вы можете отправить сообщение обратно на свой сервер с помощью XML или JSON. Ваш javascript должен будет создать пост, который в случае XML потребовал бы, чтобы вы создали его в javascript. JSON не только легче, но и проще в JavaScript. Посмотрите JSON-PHP для анализа JSON.
Возможно, вы захотите взглянуть на создание данных JSON в PHP
Другие советы
Вы можете сделать это с помощью метода $ .post в jQuery (например):
var myJavascriptArray = new Array('jj', 'kk', 'oo');
$.post('urltocallinajax', {'myphpvariable[]': myJavascriptArray }, function(data){
// do something with received data!
});
Php получит массив с именем myphpvariable и он будет содержать значения myJavascriptArray.
Это так?
IIRC, если PHP видит строку запроса, которая выглядит как http://blah.com/test.php?var [] = foo & amp [var [] = bar & amp; var [] = baz
, он автоматически создаст массив с именем $ var
, содержащий foo, bar и baz. Я думаю, что вы даже можете указать индекс массива в квадратных скобках строки запроса, и он будет придерживаться значения в этом индексе. Возможно, вам понадобится URL-адрес, чтобы закодировать скобки ... Обычный способ использования этой функции - создание поля ввода HTML с именем " var [] " ;, поэтому просто делайте то, что обычно делает браузер. В документации PHP есть раздел о переменных массива через запрос.
Возможно, вы ищете способ сериализации (версия jQuery). р>
jQuery 1.4 был обновлен для использования синтаксиса PHP для отправки массивов. Вы можете переключить его в старый стиль, используя:
вот синтаксис:
jQuery.ajaxSetting.traditional = true;
вот пример
$.ajax({
traditional: true,
type: "post",
url: myURL,
dataType: "text",
data: dataToSend, //this will be an array eg.
success: function(request) {
$('#results').html(request);
} // End success
}); // End ajax method
Вы можете создать массив и отправить его, как рекомендовал Меадор: (следующий код Mootooled, но похож в других библиотеках / простой старый JS)
myArray.each(function(item, index) myObject.set('arrayItems['+index+']', item);
myAjax.send(myObject.toQueryString());
Это отправит php массив с именем arrayItems, доступ к которому можно получить через $ _POST ['arrayItems']
echo Вы можете создать массив и отправить его, как рекомендовал Меадор:
(следующий код Mootooled, но похож в других библиотеках / простой старый JS)
myArray.each(function(item, index) myObject.set('arrayItems['+index+']', item);
myAjax.send(myObject.toQueryString());
Это отправит php массив с именем arrayItems, доступ к которому можно получить через $ _POST ['arrayItems']
<*>
отобразит что-то вроде: array = > {[0] = > 'first thing', [1] = > вторая вещь}
POST['arrayItems'] ;
отобразит что-то вроде: array = > {[0] = > 'first thing', [1] = > вторая вещь}