jQuery:在ajax响应中评估脚本
问题描述:
来自我的web应用程序的XML响应既有要添加到页面的HTML,也有一些脚本需要运行。jQuery:在ajax响应中评估脚本
我想从我的web应用程序像发回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页面和eval'ing <script>
。
我在寻找批评我的方法。任何人的建议?
答
你宁愿发送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) ;
答
JSON会比XML imho更适合此目的。
答
可以使用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());
}
});
});
我没有测试过它,但它应该按照this article工作。
答
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。
编辑:
澄清:
- 脚本只运行里面
script
标签 - 添加文档加载之后的脚本,只有当它被添加到
head
标签
感谢Deniz Porsuk的评论,以改善答案
如果在div标签内追加Child脚本。它们不会被浏览器执行。脚本应该附加“脚本”标签。 – 2015-04-30 09:07:19
你在说哪个div?我使用脚本标签'var scriptElement = document.createElement('SCRIPT');'。请解释你的评论。 – IgniteCoders 2015-06-08 15:05:02
是的,这是真实的方式。但是,如果你在div中创建你的脚本,如var divElement = document.createElement('div');并从scriptElement = document.createElement('SCRIPT'); divElement.innerHTML = scriptElement;脚本不会被浏览器执行。 – 2015-06-09 07:40:55