如何运行a<;脚本>;元素,该元素包含从AJAX调用获得的JavaScript?

如何运行a<;脚本>;元素,该元素包含从AJAX调用获得的JavaScript?,javascript,html,ajax,dom,Javascript,Html,Ajax,Dom,我有一个AJAX调用,它返回以下javascript:警报('Hello World!')。。我尝试在回调函数中将它附加到DOM的“body”和“head”元素,但这两个元素都没有导致脚本执行。如何让它运行?看看JS eval() 当您得到响应后,将其添加到主体中,然后使用jquery拉出字符串并对其求值 $.get( url, function(data) { var d = $('<div/>').appendTo($('body')).append(data);

我有一个AJAX调用,它返回以下javascript:
警报('Hello World!')。
。我尝试在回调函数中将它附加到DOM的“body”和“head”元素,但这两个元素都没有导致脚本执行。如何让它运行?

看看JS eval()

当您得到响应后,将其添加到主体中,然后使用jquery拉出字符串并对其求值

$.get( url, function(data) {
    var d = $('<div/>').appendTo($('body')).append(data);
    eval($('script', d).text());
    d.remove();
  }
)
$.get(url、函数(数据){
var d=$('').appendTo($('body')).append(数据);
eval($('script',d).text());
d、 删除();
}
)
“”是一个文本,用于在DOM中创建节点(使用后丢弃),作为js代码的占位符


上面的代码也适用于多个“”片段。

让服务器返回代码而不带脚本标记,然后运行它创建函数

(new Function('alert("Hello World")'))()
如果之前无法避免使用脚本标记,可以在应用之前使用正则表达式将其删除

var data = '<script type="text/javascript">alert("hello world")</script>';
var regex = /<[^>]*script[^>]*>(.*)<\/[^>]*script[^>]*>/;
data.replace(regex,"$1")
var数据='alert(“hello world”);
var regex=/]*脚本[^>]*>(.*)]*脚本[^>]*>/;
数据。替换(regex,“$1”)
或者甚至在特定字符处拆分字符串(这不是一个好的选择,原因很明显:您弄乱了字符串,代码将不再运行)

var数据='alert(“hello world”);
data.substr(31,data.length-40);
第一种选择是更好的,性能方面的


如果您真的想按原样使用整个字符串执行代码,您只需确保您使用的库没有转义代码。

这对我来说是一个很好的替代

<script></script>

。。。甚至可以在使用AJAX加载的HTML文件中使用

<img src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" onload="alert('test');this.parentNode.removeChild(this);" />


试试看。它使用图像“onload”调用来运行内部javascript,只要加载了数据uri包含的一个像素图像。

Get Hello World的可能副本!作为ajax调用的结果,并在获得结果后显示警报。请参见[1]:@Andrew我尝试了j query的getScript,但它不喜欢这些标记。这就是我接收数据的方式。这里有不止一双这样的鞋,我真的不想费劲去试着把它们去掉。看起来eval()也不会喜欢这些标记。@Ravindra hello world只是一个例子,代码实际上相当复杂。我只是输入了警报,看看是否会执行任何操作。Jquery有$.getScript()方法,顺便说一句,对不起,我有点糊涂。这是“文字”还是用什么替换它?我可以让它在没有标签的情况下工作。真正的剧本可能相当长。我不擅长正则表达式,我还没能想出一个只去掉脚本标记的方法。那么,另一个答案就是你需要的。我用js编辑了伪代码,你可以自己试试。
<img src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" onload="alert('test');this.parentNode.removeChild(this);" />