如何在ajax响应返回的脚本标记内执行javascript
我正在发送一个jquery get请求,如下所示:
$.get($(this).attr("href"), $(this).serialize(), null, "script");
我希望收到的响应将包含在脚本标记中。
我知道浏览器不会执行响应,除非它返回没有脚本标记。 通常我会从响应中删除标签,但在这种情况下,我无法访问远程计算机上运行的代码,因此无法在源处删除标记。
有没有办法可以从响应客户端剥离脚本标签并执行javascript?
您应该能够执行以下操作:
$.get($(this).attr("href"), $(this).serialize(), function(data){ var script = $(data).text(); eval(script); });
要么:
var myScript = new Function($('script#myscript',responseText).text()); myScript();
如果我理解你的问题,这应该足以从脚本标签中获取文本:
$(response).text()
这会对你有所帮助: http : //docs.jquery.com/Ajax/jQuery.getScript ?
Jose Basilio的回答没问题,但我建议用jQuery的globalEval函数替换eval …
$.get($(this).attr("href"), $(this).serialize(), function(data) { script = $(data).text(); $.globalEval(script); });
globalEval是在使用返回类型的脚本调用ajax方法时通常会调用的函数。
这来自API文档……
此方法与使用普通JavaScript eval()的行为不同,因为它在全局上下文中执行(这对于动态加载外部脚本很重要)。
说我们的回答是在’响应’var中:
script = response.replace(/
我做的略有不同,并使用php land使其更容易。 (我不喜欢使用eval,也不喜欢巨大的重写)。
我把所有的jquery放在一个像这样的php字符串中(现实生活中有很多JavaScript)
$out .= " $('#save_now').button(); \n"; $out .= " $('#save_now').click( function() {\n"; $out .= " return false;\n"; $out .= " }); \n";
然后还在php土地上
echo "\n";
然后在jQuery $ .ajax调用中我这样做
$.ajax({ url: geturl, type: 'post', data: getparams, success: function(data) { mydiv.html(data); onOpen(); }, cache: false });
正如你所看到的那样,你不需要知道php的内容,它只是在我的代码库中,我确实需要这样做。 诀窍是取消$(document).ready(function(){});
并滚动你自己