Запрос на несколько ответов - PullRequest
0 голосов
/ 09 апреля 2009

Я хотел бы создать веб-приложение.

Бывают случаи, когда запрос пользователя приводит к обновлению контента в 2-3, а иногда и более контейнерах. Самый простой способ - запускать запросы один за другим в последовательности и обрабатывать результаты один за другим. Я хотел бы получить только один запрос, если это возможно, и собрать все результаты для ответов.

Например: скажем, есть основной контейнер (M) и некоторые другие (меньшие) контейнеры (A, B, C и т. Д.)

Простой способ будет: запросить основную функцию с сервера для M, показать ее в контейнере M

получить другой контент с сервера, выделенного для A_container, показать его в A_container получить другой контент с сервера, выделенного для B_container, показать его в B_container получить другой контент с сервера, выделенного для C_container, показать его в C_container

В зависимости от основной функции, запрашиваемой пользователем, только некоторые контейнеры должны обновлять его содержимое, а не все.

Я бы хотел минимизировать количество запросов. На самом деле свести его к одному. Конечно, это может сделать Json или XML.

Я хотел бы собрать все ответы с сервера, инкапсулировать их (A_container: «это контент для A_container», C_container: «Другой контент для C_container») и отправить его обратно клиенту, где клиент будет распакуйте его, и что касается содержимого, он будет делегировать каждый из них в соответствующий контейнер.

У меня вопрос: как бы вы это сделали, когда знаете, что возвращаемые данные очень переменны: в некоторых случаях они могут содержать даже элементы HTML, кавычки, двойные кавычки и т. Д. Если я не ошибаюсь, в в некоторых особых случаях это может испортить Json и xml.

Моя идея состояла в том, чтобы разделить различное содержимое с помощью специальных разделителей (сейчас просто для простого примера давайте используем xxx и yyy). Это очень уродливое решение, но вы точно не можете испортить содержимое, если разделители достаточно уникальны.

Предыдущее Json-подобное решение выглядело бы так: «A_containeryyyЭто контент для A_containerxxxC_containeryyyДругой контент для C_container»

Затем на стороне клиента сначала разделите код на xxx, что в этом случае приведет к двум элементам массива (строкам), что будет снова разделено на yyy. Первый элемент даст идентификатор контейнера, а второй - его содержимое. После этого последний шаг будет проходить через новые массивы и отображать результат в соответствующих контейнерах.

Есть ли кто-нибудь, кто предложил бы более хороший способ для этого, или кто мог бы показать безопасный способ сделать это в Json, или XML и т. Д.?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2009
Предыдущее Json-подобное решение выглядело бы так: «A_containeryyythis - это содержимое для A_containerxxxC_containeryyyДругое содержимое для C_container»

Это больше похоже на "текст / простой" ответ от сервера, который вы бы обработали через разделение JavaScript. Что вы действительно хотите сделать, это вернуть объект json с сервера, например,

object = {'A container content','etc','etc','etc'}

Затем оцените это, используя javascript со стороны клиента, используя eval (объект). Оттуда я буду заполнять каждый из ваших «контейнеров».

0 голосов
/ 09 апреля 2009

Отформатируйте ваш запрос, используя XML:

<response>
    <m>Content</m>
    <a>Content</a>
    <b>Content</b>
    <c>Content</c>
</response>

Затем проанализируйте XML в обратном вызове XMLHttpRequest:

var xmldoc = req.responseXML;
var root = xmldoc.getElementsByTagName('response').item(0);
var contentm = root.getElementsByTagName('m');
var contenta = root.getElementsByTagName('a');
var contentb = root.getElementsByTagName('b');
var contentc = root.getElementsByTagName('c');
if (contentm) {
  /* Update Container M */
}
if (contenta) {
  /* Update Container A */
}
if (contentb) {
  /* Update Container B */
}
if (contentc) {
  /* Update Container C */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...