jQuery:评估ajax响应中的脚本

时间:2010-01-28 21:24:48

标签: javascript jquery xml json

来自我的webapp的XML响应都有要添加到页面的HTML,有些还有要运行的脚本。

我正在尝试从我的webapp发回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>

我现在正在做的是抢购<html-to-insert><script> CDATA,将html插入页面并评估<script>

我正在寻找对我的方法的批评。有人提出任何建议吗?

5 个答案:

答案 0 :(得分:8)

您可以使用 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 herehere

的更多信息

我还没有测试过,但它应该按照this article进行测试。

答案 1 :(得分:2)

你宁愿发送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 ) ;

答案 2 :(得分:2)

This是我找到的最佳答案。完美的工作:


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);
}

感谢Joseph the Dreamer。原始答案here

修改

澄清:

  1. 脚本仅在script标记
  2. 内运行
  3. 在文档加载后添加脚本,仅在添加到head标记
  4. 时生效

    感谢Deniz Porsuk评论以改进答案

答案 3 :(得分:0)

JSON比XML imho更适合这个目的。

答案 4 :(得分:0)

如果您将 ajax 请求响应输出为 $target.html(response); 脚本,浏览器将对其进行评估,而您无需采取任何其他措施。