JQuery RJS вставка строки против DOM - PullRequest
1 голос
/ 13 апреля 2010

Поэтому я пытаюсь использовать jQuery для вставки данных из вызова ajax.

Я на самом деле использую плагин jquery.form, и мне отправляется форма ajax с dataType: 'script'.

Ответ является выражением jquery, которое содержит тег <%= javascript_escape(render ...) %> erb (аналогично тому, что предписывает эпизод 136 railscasts). Однако конечный результат заключается в том, что полный текст рендера вставляется так, как если бы это был контент для вставки на страницу в виде текста, а не элементов dom.

Может ли быть причиной того, что в начале рендера были некоторые символы новой строки?

Дом текст: "\n \n &lt;li>....&lt;/li>"

Я также пытался заставить jQuery просто прочитать ответ как скрипт и выполнить его, и использовал основанный на прототипе материал rjs, эффект тот же, текст вставляется в dom. Существуют ли причины, по которым такое поведение может возникнуть?

Немного пояснений:

Мой response.js.erb

jQuery("#content").append("<%= escape_javascript(render(:partial => "widgets")) %>");
jQuery("#information").text("Finally, something happened!");

Полный текст внутри вызова append () вставляется как текст в содержимое #.

Обновление:

Я провел некоторое исследование этой проблемы. Оказывается, причина, по которой rails экранирует символы <>, заключается в том, что он думает, что рендерит обычный файл .html. Причина в том, что он не указывает на то, что идет .js, потому что сообщение сделано с использованием iframe (сообщение содержит файл). Если я добавлю .js в конец запроса, я смогу сделать respond_to do |format| format.js, однако он не поддерживает сообщения http. Есть ли способ настроить его так, чтобы он принимал сообщения по запросу .js для действия?

1 Ответ

1 голос
/ 14 апреля 2010

Я думаю, это потому, что для dataType установлено значение «script».Если вы хотите, чтобы результаты вызова AJAX обрабатывались как элементы DOM, измените его на HTML.

Это также зависит от того, как вы вставляете результаты в документ.Я сомневаюсь, что это так, но если вы используете .text () вместо .html (), вы получите простой текст, а не элементы DOM.

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