Я думаю, что вы на правильном пути с JSON, в этом есть смысл.
- Сериализация формы в JSON ( Сериализация в JSON в jQuery )
- ЗАПИШИТЕ эту строку JSON через ajax
- Тогда http://php.net/manual/en/function.json-decode.php
Также см. Преобразование данных формы в объект JavaScript с помощью jQuery (эти два вопроса SO содержат ценные ссылки на библиотеки и плагины)
Редактировать
Что касается ваших вопросов:
Что вы думаете об этой стратегии?
Ваш пример показан? Я предполагаю, что вы проверили это, и это работает. Если он имитирует поведение, которое вы ожидаете, я думаю, что это нормально. Это требует, чтобы вы не переписывали ни один из ваших PHP, и это то, с чем вам, очевидно, удобно работать. Это льготы.
Однако, если вы работаете разумно, кодирование ввода формы в JSON и использование json_decode дает тот же эффект, теоретически требуя очень мало изменений в том, как вы пишете свой PHP после того, как вы декодировали JSON.
Лучше ли создать объект JSON и управлять им на стороне клиент / сервер (память, обработка, время, ресурсы и т. Д.)?
Я не могу говорить за память и т. Д. Я не ожидаю, что это будет плохо для производительности, если иметь дело с объектом JSON на стороне сервера. Обычно на такие вопросы нет простого ответа, потому что это зависит от слишком многих других вещей.
Почему для подобных вещей я должен создать объект, преобразовать его в json, декодировать в php, управлять результатом, преобразовать его в json и отправить заново? Я могу управлять только строкой ...
Что происходит в вашем примере без JSON (свободно говоря):
- Браузер принимает ввод, кодирует его в строку запроса GET
- Создает запрос GET, который включает строку
- PHP обращается к строке GET, позволяя вам ссылаться на нее как на массив
Что произойдет в вашем примере с JSON (опять же, свободно говоря):
- Ваш JavaScript принимает входные данные, кодирует их в JSON
- Создает запрос GET (или POST) со строкой
- PHP обращается к строке GET (или данным POST), позволяя вам ссылаться на нее как на массив
- Вы используете json_decode на одном из ключей массива, чтобы преобразовать его в объект PHP
То, как вы это сформулировали, создает впечатление, что вы думаете, что использование JSON добавляет много дополнительных шагов. Я думаю, что сложность во многом мнимая. (В зависимости от того, как вы решили «сериализовать» входные данные формы в JSON, на самом деле это может быть просто строка, действительная для JSON, до тех пор, пока вы не декодируете с помощью PHP.)
Скорее всего, в будущем будет выгодно выбирать для работы с одним и тем же объектом JSON все время. Представьте, что вы отправляете информацию о проверке в формате JSON, например ...
Только PHP или сервер других языков (например, ASP?) Автоматически создают массив из списка параметров с тем же именем и []?
Я не уверен, что понимаю этот вопрос, но я бы ответил, что как язык работает со строкой GET, кодированной из:
<input name="style[]" />
<input name="style[]" />
<input name="style[]" />
Будет уникальным для языка. Я имел дело с ColdFusion раньше и хотел что-то похожее (чтобы построить структуру, основанную на имени входных данных). Но чтобы сделать это, мне пришлось пройти через область видимости FORM и «повторно объявить», даже если это был правильный синтаксис точки, например:
<input name="name.first" />
<input name="name.middle" />
<input name="name.last" />
Например, JavaScript не должен воспринимать эти входные данные как массив. Я не помню, чтобы JavaScript позволял вам заполнять массив следующим синтаксисом:
style[] = "red";
style[] = "green";
style[] = "blue";
В то время как PHP делает. Это не значит, что кто-то делает что-то не так. Это ярлык в PHP. Кратчайший способ заполнения массива в JavaScript отличается.
А что касается преобразования его в массив, хорошо ... Вы не передаете массивы в HTTP-запросах, PHP позволяет получить доступ к строке GET в виде массива (или данных POST) без необходимости делать что-то особенное ... два разных вопроса.
Это на самом деле самая веская причина использовать здесь JSON, поэтому другие говорят, что именно для этого и предназначен JSON. Подумайте об этом, JSON - это «легкий, независимый от языка открытый текстовый стандарт, разработанный для удобочитаемого обмена данными». Вы представляете массивы и объекты с помощью JSON, к которым всегда можно получить доступ как к массивам и объектам независимо от того, на каком языке вы работаете.