如何在 ajax 响应返回的脚本标签内执行 javascript

IT技术 javascript ajax jquery
2021-03-02 07:29:57

我正在发送一个 jquery get 请求,如下所示:

$.get($(this).attr("href"), $(this).serialize(), null, "script");

我希望收到的响应将包含在脚本标签中。

我知道浏览器不会执行响应,除非它返回没有脚本标签。通常我会从响应中删除标签,但在这种情况下,我无权访问远程机器上运行的代码,因此无法从源头删除标签。

有没有办法可以从响应客户端中删除脚本标签并执行 javascript?

6个回答

您应该能够执行以下操作:

$.get($(this).attr("href"), $(this).serialize(), function(data){
   var script = $(data).text();
   eval(script);
});
我建议在脚本之前添加 var,以防止它是全局的。
2021-05-07 07:29:57

或者:

var myScript = new Function($('script#myscript',responseText).text());
myScript();

如果我理解你的问题是正确的,这应该足以从脚本标签中获取文本:

$(response).text()

这对您有帮助吗:http : //docs.jquery.com/Ajax/jQuery.getScript

如果返回的数据没有包含在 <script> 标签中,这将起作用
2021-05-02 07:29:57

Jose Basilio 的回答没问题,但我建议用jQuery 的globalEval函数替换eval ...

$.get($(this).attr("href"), $(this).serialize(), function(data) {
   script = $(data).text();
   $.globalEval(script);
});

globalEval是调用返回类型为script的 ajax 方法时通常会调用的函数

这来自 API 文档...

此方法与使用普通 JavaScript eval() 的行为不同,因为它在全局上下文中执行(这对于动态加载外部脚本很重要)。