У меня есть интерактивное веб-приложение, на котором работает 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