如何在ajax响应返回的脚本标记内执行javascript
我正在发送一个jquery get请求,如下所示:如何在ajax响应返回的脚本标记内执行javascript,javascript,ajax,jquery,Javascript,Ajax,Jquery,我正在发送一个jquery get请求,如下所示: $.get($(this).attr("href"), $(this).serialize(), null, "script"); 我期望收到的响应将包装在脚本标记中 我知道浏览器不会执行响应,除非返回的响应没有脚本标记。通常我会从响应中删除标记,但在这种情况下,我无法访问远程机器上运行的代码,因此无法从源代码中删除标记 是否有一种方法可以从响应客户端剥离脚本标记并执行javascript?如果我正确理解您的问题,这应该足以从脚本标记中提取文
$.get($(this).attr("href"), $(this).serialize(), null, "script");
我期望收到的响应将包装在脚本标记中
我知道浏览器不会执行响应,除非返回的响应没有脚本标记。通常我会从响应中删除标记,但在这种情况下,我无法访问远程机器上运行的代码,因此无法从源代码中删除标记
是否有一种方法可以从响应客户端剥离脚本标记并执行javascript?如果我正确理解您的问题,这应该足以从脚本标记中提取文本:
$(响应).text()
假设我们的响应在“响应”变量中:
script = response.replace(/<script>(.*)<\/script>/, "$1"); // Remove tags
eval(script); // Execute javascript
script=response.replace(/(.*)/,“$1”);//删除标签
评估(脚本);//执行javascript
这对您有帮助吗:?您应该能够执行以下操作:
$.get($(this).attr("href"), $(this).serialize(), function(data){
var script = $(data).text();
eval(script);
});
或:
Jose Basilio的答案是可以的,但我建议用jQuery的globalEval函数替换eval
$.get($(this).attr("href"), $(this).serialize(), function(data) {
script = $(data).text();
$.globalEval(script);
});
globalEval是在使用脚本的返回类型调用ajax方法时通常会调用的函数
这来自API文档
此方法的行为与使用普通JavaScript eval()不同
因为它是在全局上下文中执行的(这很重要)
用于动态加载外部脚本)
我的做法略有不同,并使用PHPLAND使其更简单。(我不喜欢使用eval,也不喜欢大量引人注目的重写) 我将所有jquery放在一个php字符串中,就像这样(现实生活中有更多的JavaScript) 然后也是在菲律宾
echo "<script>\n";
echo " function onOpen(){ \n";
echo $out;
echo " } \n";
echo "</script>\n";
正如你所看到的,你不需要php的土地的东西,它只是在我的代码库,我有点需要这样做。诀窍是去掉
$(document).ready(function(){})但是,如果要使用此解决方案,您可能需要将正则表达式复杂化一点,以允许脚本标记中的任何属性,并可能将所述正则表达式锚定到字符串的开头和结尾。例如(完全未测试):/^]+>(.*)$/如果返回的数据未包装在tagsI中,则该选项将有效。建议在脚本之前添加var,以防止其成为全局变量。
$out .= " $('#save_now').button(); \n";
$out .= " $('#save_now').click( function() {\n";
$out .= " return false;\n";
$out .= " }); \n";
echo "<script>\n";
echo " function onOpen(){ \n";
echo $out;
echo " } \n";
echo "</script>\n";
$.ajax({
url: geturl,
type: 'post',
data: getparams,
success: function(data) {
mydiv.html(data);
onOpen();
},
cache: false
});