Каков наилучший способ отправки массива JavaScript в PHP-скрипт с помощью GET?

У меня есть интерактивное веб-приложение, на котором работает 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 с перезагрузкой страницы.

json_decode () должен служить вам хорошо здесь.

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

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

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

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

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

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

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

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

Вы можете, например, посмотреть:

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

Если это просто простой плоский массив, вам не нужно ничего делать, поскольку 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']); } 

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

 var jsonArray = $.toJSON(jsArray); 

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