jQuery, Ajax и возвращение полной HTML-структуры - PullRequest
2 голосов
/ 11 июня 2009

Я новичок в jQuery и в некоторой степени в программировании на JavaScript. Я успешно начал использовать jQuery для своих Ajax-вызовов, однако я в тупике и уверен, что это вопрос новичка, но здесь все в порядке.

Я пытаюсь вернуть в вызове Ajax полную html-структуру, вплоть до структуры таблицы. Однако, что продолжает происходить, так это то, что jQuery либо убирает теги html и вставляет только самый глубокий уровень «текста», либо специальные символы, такие как <, > и т. Д., Заменяются экранированными

Мне нужно знать, как отключить эту обработку полученных символов. Используя firebug, я вижу, что ответы правильно выходят из моего WebServer, но страница, полученная пользователем и обработанная таким образом jQuery, неверна. Вот быстрый пример того, что я имею в виду.

Я отправляю что-то вроде этого

<results><table id="test"><tr>test</tr></table></results>

то, что появляется на моей странице, если я делаю просмотр исходного кода страницы, это.

&lt;results&gt;&lt;table....

чтобы вы могли видеть, что специальные символы конвертируются, и я не знаю, как это остановить.

Идея состоит в том, чтобы <results></results> был тегом xml, а текст этого тега - тем, что помещается в существующий <div> на моей странице.

Вот JavaScript, который я использую для вывода ответа и вставки:

$.post(url, params, function(data) 
{ 
  $('#queryresultsblock').text(data)
}, "html"); 

Я пробовал разные варианты, кроме «html», например «xml», «text» и т. Д. Все они делают разные вещи, «html» делает меня наиболее близким.

Ответы [ 3 ]

2 голосов
/ 11 июня 2009

Самый простой способ - просто вернуть необработанный HTML-код и использовать метод jQuery html.

Ваш результат:

<table id="test"><tr>test</tr></table>

Ваш вызов Javascript:

$.post(url, params, function(data){ $('#queryresultsblock').html(data) })

Другое решение с меньшим контролем - вы можете сделать только запрос GET - но проще - использовать load:

$("#queryresultsblock").load(url);

Если вы должны вернуть свой результат в XML-теге results, вы можете попробовать добавить селектор jQuery к вашему вызову load:

$("#queryresultsblock").load(url + " #test");
1 голос
/ 11 июня 2009

Вы не можете поместить неэкранированный HTML-код в XML. Есть два варианта, которые я считаю хорошими путями.

Один из способов - отправить экранированный HTML-код в XML-коде, а затем использовать JavaScript на стороне клиента, не сохраняя этот HTML-код. Так вы бы отправили

<results>&lt;results&gt;&lt;table....

И javascript конвертирует &lt; в <и т. Д. </p>

Другой вариант, и то, что я хотел бы сделать, это использовать JSON вместо XML.

{'results': "<table id="test"><tr>test</tr></table>" }

JavaScript должен иметь возможность извлекать эту HTML-структуру в виде строки и вставлять ее непосредственно на вашу страницу без какого-либо выхода или выхода из нее.

0 голосов
/ 11 июня 2009

Другое, что вы можете сделать, это создать внешний файл .html, включив в него только ваш HTML-код. Так что создайте include.html с

<results><table id="test"><tr>test</tr></table></results>

В качестве содержимого, затем используйте функцию jquery .load, чтобы получить его на странице. Смотрите это в действии здесь .

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