Я изучаю 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 размерности или представляет собой ассоциативный массив, вы должны использовать 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));
encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
массив и добавьте в encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
в строку запроса.
Кроме того, следует ли использовать JSON?
Вы могли бы, но это означало бы расшифровку JSON на другом конце, вместо того чтобы позволить нормальной обработке формы заботиться об этом.
И если да, то как я могу отправить объект JSON через ajax?
Нет такой вещи, как объект JSON . JSON принимает форму строки, и вы можете включать строки в строки запроса (просто запомните encodeURIComponent
).
Прежде всего, да, не пишите 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, и у вас есть его!