jQuery: оценка сценария в ответе ajax - PullRequest
5 голосов
/ 29 января 2010

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

Я пытаюсь отправить обратно XML из моего веб-приложения, например:

<?xml version="1.0"?>
<doc>
  <html-to-insert>
    <![CDATA[<p>add me to the page</p>]]>
  </html-to-insert>
  <script>
    <![CDATA[ alert('execute me'); ]]>
  </script>
</doc>

То, что я сейчас делаю, это отключение CDATA <html-to-insert> и <script>, вставка html на страницу и получение <script>.

Я ищу критику на мой подход. Любые предложения от кого-либо?

Ответы [ 4 ]

8 голосов
/ 29 января 2010

Вы можете использовать библиотеку jQuery , чтобы сделать XML-запрос к вашему бэкэнду, а также проанализировать его

$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "your/url/that/returns/xml",
    dataType: "xml",
    success: function (xml) {
      // xml contains the returned xml from the backend

      $("body").append($(xml).find("html-to-insert").eq(0));
      eval($(xml).find("script").text());
    }
  });
});

Вы можете узнать больше о jQuery здесь и здесь

Я не проверял его, но он должен работать согласно этой статье .

2 голосов
/ 20 августа 2014

Это - лучший ответ, который я нашел. Идеальная работа:


element.innerHTML = xmlhttp.responseText;
var scriptElements = element.getElementsByTagName('SCRIPT');
for (i = 0; i < scriptElements.length; i ++) {
    var scriptElement = document.createElement('SCRIPT');
    scriptElement.type = 'text/javascript';
    if (!scriptElements[i].src) {
        scriptElement.innerHTML = scriptElements[i].innerHTML;
    } else {
        scriptElement.src = scriptElements[i].src;
    }
    document.head.appendChild(scriptElement);
}

Благодаря Иосифу Мечтателю . Оригинальный ответ здесь .

EDIT:

Пояснение:

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

Благодарю Дениз Порсук за комментарий для улучшения ответа

2 голосов
/ 29 января 2010

Вы бы предпочли отправить JSON, это проще для интерпретации Пример:

// Suppose your response is a string:
// { html: "<p>add me to the page</p>, script:"alert('execute me');" }
var obj = eval( "(" + response + ")" ) ;
eval( obj.script ) ;
0 голосов
/ 29 января 2010

JSON лучше подходит для этой цели, чем XML imho.

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