Передача JSON или аналогичного объекта через URL и синтаксический анализ в PHP - PullRequest
2 голосов
/ 08 мая 2011

Ситуация выглядит следующим образом:

Из-за не зависящих от меня обстоятельств я пишу серверную часть, которая предоставляет данные ТОЛЬКО через JSON.

Пользовательский интерфейс - чистый HTML / jQuery.,Все запросы из пользовательского интерфейса приводят к объекту JSON (часто довольно сложный).Мне нужно, чтобы пользовательский интерфейс мог передавать мне сложный объект, который включает в себя несколько списков идентификаторов и строк.

Какой самый лучший способ реализовать это?

  • Несколько параметров GET / POSTнекоторые из которых являются списками, например &List=1,2,3
  • Полный объект JSON в виде одного параметра, например ?Data={"List"=[1,2,3]}
  • Что-то еще полностью.

Если вы 'я сделал что-то похожее, мне было бы интересно узнать о вашем опыте, особенно в отношении передачи определений объектов клиенту.

В этом случае представьте следующий пакет данных ...

{
    Id: 1,
    Status: "Processing",
    RecordTypeAIds: (1,2,3)
    RecordTypeBIds: (4,5,6)
    RecordTypeCIds: null
}

Какой самый удобный способ отправить эту информацию из jQuery в PHP (учитывая, что списки могут быть вложенными n-глубиной)

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

3 голосов
/ 08 мая 2011

Просто чтобы выразить свое мнение там.Я предпочитаю JSON, просто отправлять сложные объекты с помощью предпочитаемого вами метода (GET / POST), и они почти мгновенно становятся объектом / массивом в PHP с использованием глобальных переменных ($ _ POST ['key']) и json_decode ().Если вы используете jQuery, то часть «отправки» легко достигается с помощью $ .ajax (), $ .get () или $ .post ().POST теоретически не имеет ограничения данных, поэтому для произвольно больших наборов данных это было бы предпочтительным.

2 голосов
/ 08 мая 2011

Используйте (почти) все JSON-решение Data = {... your object ...}.В PHP вам нужно $ data = json_decode ($ _ REQUEST ['Data']) ;.jQuery имеет аналогичную функцию для поддержки на стороне браузера.

Для HTML-форм и обычных URL-адресов ... напишите адаптер на стороне сервера, который преобразует аргументы в $ _REQUEST в эквивалентную структуру данных $ и вызывает тот же код, что ивыше.Если вы называете свои HTML-поля нотацией массива PHP, это может быть просто: $ data = $ _REQUEST;

Пример в HTML

<input type='hidden' name='Status' value='Processing'>
<input type='hidden' name='RecordTypeAIds[0]' value='1'>
<input type='hidden' name='RecordTypeAIds[1]' value='2'>
<input type='hidden' name='RecordTypeAIds[2]' value='3'>

Появляется в $ _REQUEST как (подмножество) ваш пример структуры.

Проблема с нотацией массива PHP в элементах формы заключается в том, что ... если вам нужно заполнить такую ​​форму из JSON, то вы должны написать слегка сложную функцию декодирования в Javascript, чтобы отобразить структуру JSON.в правильные имена полей.Нет хорошего способа избежать функции декодирования, потому что система имен форм DOM плоская, где имена полей JSON вложены, а для элементов массива JSON имена (индексы) являются неявными.Использование чего-либо кроме нотации массива PHP в именах элементов формы только увеличивает объем работы на стороне сервера.

1 голос
/ 08 мая 2011

Если вы хотите передать объект JSON в PHP, тогда требуемый метод включен по умолчанию в 5.2.0 и выше. http://www.php.net/manual/en/function.json-decode.php

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