Отправка объекта Javascript в PHP через Ajax
Я изучаю Ajax по ошибке и ударил стену:
У меня есть массив (если это имеет значение, массив хранит идентификатор номера на основе того, какие флажки проверяются пользователем), который написан в Javascript.
У меня есть функция, которая вызывается, когда пользователь нажимает кнопку "Сохранить". Функция следующая:
function createAmenities() {
if (window.XMLHttpRequest) {
//code for IE7+, Firefox, Chrome and Opera
xmlhttp = new XMLHttpRequest();
}
else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById('message').innerHTML = xmlhttp.responseText;
}
}
var url = "create_amenities.php";
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
Мой вопрос: что я могу добавить в эту функцию, чтобы вытащить массив в скрипт php, который я пытаюсь вызвать ('create_amvents.php')?
Кроме того, следует ли использовать JSON? И если да, то как я могу отправить объект JSON через ajax?
Заранее спасибо.
Ответы
Ответ 1
Если ваш массив имеет более 1 размерности или представляет собой ассоциативный массив, вы должны использовать JSON.
Json превращает полную структуру массива в строку. Эта строка может быть легко отправлена в ваше приложение php и возвращена в массив php.
Дополнительная информация о json: http://www.json.org/js.html
var my_array = { ... };
var json = JSON.stringify( my_array );
В php вы можете декодировать строку с помощью json_decode:
http://www.php.net/manual/en/function.json-decode.php
var_dump(json_decode($json));
Ответ 2
encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
массив и добавьте в encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
в строку запроса.
Кроме того, следует ли использовать JSON?
Вы могли бы, но это означало бы расшифровку JSON на другом конце, вместо того чтобы позволить нормальной обработке формы заботиться об этом.
И если да, то как я могу отправить объект JSON через ajax?
Нет такой вещи, как объект JSON. JSON принимает форму строки, и вы можете включать строки в строки запроса (просто запомните encodeURIComponent
).
Ответ 3
Прежде всего, да, не пишите ajax вручную. Вы вряд ли создадите что-то, что действительно работает во всех браузерах.
Лучшим подходом к вашей реальной проблеме было бы представить ваш массив как параметры cgi.
Если флажки находятся в форме, вам нужно сделать очень мало - просто отправьте форму,
<form><input type=checkbox ...><input type=checkbox ...>
$.post("test.php", $("#testform").serialize());
См. Http://api.jquery.com/jQuery.post/ для получения более подробной информации о том, как это сделать. Ваш список появится в виде массива в PHP.
Или, чтобы увеличить свой собственный пример с чем-то очень простым, сделайте следующее:
url = url + '?checkboxes=' + checkboxes.join(',');
Теперь просто разделите его на PHP, и у вас есть его!