如何在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(){}); 并滚动你自己