Отправка объекта 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, и у вас есть его!