Передача сложных данных по URL с изяществом - PullRequest
0 голосов
/ 22 декабря 2009

Я подумываю об использовании чего-то вроде:

<script src="http://www.example.com/?key={"param":"value"}">

Как видно из приведенного выше примера, строка в формате JSON передается по URL-адресу src. Этот пример, конечно, не работает, потому что и строка JSON, и тег script используют двойные кавычки.

Вот несколько решений, о которых я могу подумать:

  1. Используйте одинарные кавычки в теге скрипта. Проблема - не очень хорошо выглядит на странице, где все другие теги используют двойные кавычки.

  2. Используйте &quot; вместо ". Проблема - затрудняет чтение URL src.

  3. Используйте альтернативный формат обмена данными JSON, который не использует двойные кавычки. Проблема - я не могу придумать хорошего кандидата.

Что вы думаете?

Ответы [ 5 ]

1 голос
/ 23 декабря 2009

Другим вариантом будет urlencode только часть JSON. Я не уверен, как вы создаете эти URL, но если это вручную, просто возьмите:

{"param":"value",{[{"param":"value","param":"value"},{"param":"value","param":"value"}]}}

И в Firebug вызовите «escape» для той строки, которая дает вам:

%7B%22param%22%3A%22value%22%2C%7B%5B%7B%22param%22%3A%22value%22%2C%22param%22%3A%22value%22%7D%2C%7B%22param%22%3A%22value%22%2C%22param%22%3A%22value%22%7D%5D%7D%7D

Таким образом, у вас будет URL сценария, такой как:

<script src="http://www.example.com/?key=%7B%22param%22%3A%22...

Эти шестнадцатеричные коды процентов возвращаются вашим веб-сервером обратно в фактические байты, так что вы можете просто выполнить JSON-синтаксический анализ параметра GET и получить красивую вложенную структуру хеш / массив.

1 голос
/ 22 декабря 2009

Посмотрите, как URL-адреса структурированы для Google Charts - они дают довольно хорошие советы.

1 голос
/ 22 декабря 2009

Вы должны использовать encodeUriComponent и затем декодировать значение на сервере (какой язык вы используете на сервере?).

1 голос
/ 22 декабря 2009

Насколько сложными должны быть данные? Если это просто пары ключ-значение, то почему бы не использовать обычную форму URL-кодировки?

<script src="http://www.example.com/?param=value&otherparam=othervalue">
0 голосов
/ 22 декабря 2009

В аналогичных решениях одинарные кавычки - это хорошо, поэтому я бы порекомендовал.

Преимуществом этого решения является то, что оно отличает переменные от атрибутов HTML с помощью двойных кавычек.

...