Каков наилучший способ отправки массива JavaScript в сценарий PHP с помощью GET? - PullRequest
2 голосов
/ 21 июля 2009

У меня есть интерактивное веб-приложение на основе jQuery, где пользователи могут манипулировать визуальными объектами на экране. Когда это будет сделано, «состояние» объектов JavaScript должно быть отправлено в PHP для хранения в базе данных. Я бы предпочел использовать GET для этого, но решение, которое использует POST для отправки данных, также жизнеспособно.

В настоящее время я думаю сериализовать все объекты JS, используя что-то вроде base64-кодирования, и просто использовать что-то вроде:

var str = encode_objects();
document.location = 'result.php?result='+str;

Однако что-то подсказывает мне, что должен быть какой-то более элегантный способ, чем написание моей собственной функции кодирования base64 в JavaScript. Разве что-то уже встроено в JavaScript, что может сделать эту работу?

Обновление: Декодирование в PHP не является проблемой. Я знаю, как декодировать base64, JSON, что угодно в PHP. Проблема заключается в том, как кодировать данные на стороне JavaScript.

AJAX не может быть и речи. Это должен быть чистый GET или POST с перезагрузкой страницы.

Ответы [ 6 ]

7 голосов
/ 21 июля 2009

json_decode () здесь вам хорошо подойдет.

Если вы просто добавляете строку, содержащую представление JSON вашего объекта javascript к вашему HTTP-запросу, вы можете выполнить json_decode () в PHP и получить готовый к работе объект PHP.

Редактировать: я должен упомянуть, что эта страница содержит ссылку на Javascript JSON Stringifier, который преобразует ваши объекты JS в необходимый JSON.

3 голосов
/ 21 июля 2009

Прежде всего, если вы обновляете состояние объектов, это должен быть POST. постарайся сохранить все свои GET идемпотентными.

во-вторых, даже если вы не хотите делать AJAX, JSON все еще ваш друг Самый простой способ - сериализовать ваши объекты в JSON и отправить полученную строку в набор данных POST. Есть много способов декодировать JSON в PHP, и все готово.

2 голосов
/ 21 июля 2009

Вы можете использовать эту сериализованную функцию , а затем отменить ее сериализацию на стороне PHP.

1 голос
/ 21 июля 2009

Если это простой плоский массив, вам не нужно ничего делать, так как PHP имеет встроенную функцию синтаксический анализ массива из имен переменных GET / POST. Грубый пример ниже.

Сторона Javascript:

// Do the parameter-building however you want, I picked the short/messy way
var arrayvalues = [1, 2, 'a'];
var querystring = "var[]=" + arrayvalues.join("&var[]=");
querystring += "&var[something]=abcdef";
// querystring is now "var[]=1&var[]=2&var[]=a&var[something]=abcdef"

PHP сторона:

var_dump($_POST);
// Remember to validate the data properly!
if ( is_array($_POST['var']) ) {
    count($_POST['var']);
    echo $_POST['var']['something'];
    array_map('do_something_interesting', $_POST['var']);
}
1 голос
/ 21 июля 2009

GET или POST, вероятно, будут зависеть от размера ваших данных: существует ограничение на объем данных, которые вы можете передать через GET (что-то вроде 2000 байтов; больше, в зависимости от браузера).

Есть и другая вещь, которую следует учитывать: если вы изменяете данные, вы должны использовать POST; не GET, который используется для ... получения ... данных.

Что касается формата, я бы на самом деле не пошел на что-то вроде пользовательской функции, выполняющей какие-либо вещи, такие как base64: я бы определенно пошел на JSON, который является нативной нотацией JavaScript.

Вы можете, например, взглянуть на:

Существует множество библиотек JS, которые могут генерировать JSON (возможно, это может сделать любая JS Framework; существуют автономные библиотеки, такие как эта ); и, начиная с PHP 5.2, в PHP есть функции для его кодирования / декодирования (см. json_encode и json_decode)

0 голосов
/ 21 июля 2009

Я использовал Jquery / JSON.

var jsonArray = $.toJSON(jsArray);

Затем отправил его через JQuery / Ajax

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