Отправка Javascript объекта в PHP через Ajax - PullRequest
21 голосов
/ 04 августа 2011

Я изучаю 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_aabilities.php')?

Более того, я должен попробовать использовать JSON? И если да, то как я могу отправить объект JSON через ajax?

Заранее спасибо.

Ответы [ 3 ]

49 голосов
/ 04 августа 2011

Если ваш массив имеет более 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));
1 голос
/ 04 августа 2011

Цикл над массивом и каждый раз добавляйте encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&' к строке запроса.

Более того, я должен попробовать использовать JSON?

Вы можете, но это будет означать декодирование JSON на другом конце вместо того, чтобы позволить нормальной обработке формы позаботиться об этом.

И если так, как я могу отправить объект JSON через ajax?

Не существует такого понятия, как объект JSON . JSON принимает форму строки, и вы можете включать строки в строки запроса (просто не забывайте encodeURIComponent).

0 голосов
/ 04 августа 2011

Во-первых, да, не пишите 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, и вывернул!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...