Лучший способ отправить критерии поиска на сервер с AJAX? - PullRequest
3 голосов
/ 27 августа 2010

Пожалуйста, обратите внимание на следующий HTML:

<input type='text' id='name'/>
<option id='option'>
  <select value='1'>hi</select>
  <select value='2'>bye</select>
</option>
<input type='text' id='date'/>

Это очень простая форма, используемая для получения критериев поиска от пользователя.Мне нужно отправить этот критерий поиска на сервер с помощью вызова AJAX.Какой тип данных / структура лучше всего использовать для этого?И почему ?

В настоящее время я думаю о строке против объекта JSON.Итак, я либо передам

"John|2|2010-10-10" 

на сервер, либо передам

{"name":"John","option":2,"date":"2010-10-10"}

Может быть, есть какой-то другой творческий способ работы с критериями поиска?Этот критерий выводится на сервер только один раз, он не возвращается к JS.

Ответы [ 4 ]

1 голос
/ 27 августа 2010

Если вы поместите свой HTML-код в тег <form>, вы можете легко использовать функцию $.serializeArray() в jQuery.

http://api.jquery.com/serializeArray/

$.serializeArray() создает литерал объекта JavaScript в виде:

[ {name: a, value:1}, {name: b, value: 2}, ...]

Это сделано, я считаю, потому что ваша форма может иметь несколько полей с одним и тем же именем. Ассоциативный массив не поддерживает это.

Я бы рекомендовал отправлять данные на сервер в формате JSON (используя serializeArray или другим способом), а не в виде простой строки. JSON более стандартизирован и может обрабатывать экранирующие символы. Если вы используете строки, разделенные каналом, вам необходимо учитывать, когда пользователь хочет отправить канал (|) на сервер. Затем вы попадаете в ситуации, когда между значениями появляются сумасшедшие разделители, например ||**. (Я видел это - это безобразно!). Палка с JSON.

Если вы предпочитаете более похожий на строку запроса формат (например, a = 1 & b = 2 & c = 3), который вы можете включить в тело запроса, вы можете использовать $.serialize().

http://api.jquery.com/serialize/

1 голос
/ 27 августа 2010

Google использует строки запросов, эквивалентные:

search?name=John&option=2&date=2010-10-10

Это имеет несколько преимуществ:

  • поиски могут быть добавлены в закладки или отправлены по электронной почте как ссылки
  • егоуместно, что поиск - это GET-запрос, а не POST, так как он не изменяет состояние на сервере
  • , он дает вам простой «API для бедняков», посредством которого может быть выполнен запрос на выполнение определенного поискагенерируется очень просто

недостатки:

  • вам нужно все URL-кодировать
  • строки поиска архивируются в журналах и т. д.

Тем не менее, если вы выбираете из предложенных вами вариантов, я бы выбрал JSON: он немного длиннее, но я думаю, что избавит вас от множества головных болей с явно заданными параметрами (вместо того, чтобы полагаться на местоположение).внутри строки).

0 голосов
/ 27 августа 2010

Всегда лучше создать собственную структуру данных для передачи данных.Вы можете создать формат на 100% так, как вам нужно, и ожидать, что он будет маленьким, быстрым и, следовательно, эффективным.

Второй лучший вариант - это JSON, который уже довольно легкий и быстрый.Но опять же, ни один формат не превосходит ваш собственный.

Недостаток этого очевиден, он не совместим и не переносим.Так что вы должны принять это во внимание.

0 голосов
/ 27 августа 2010

Используйте плагин формы jQuery

http://jquery.malsup.com/form/

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