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

如何在ajax响应返回的脚本标记内执行javascript,javascript,ajax,jquery,Javascript,Ajax,Jquery,我正在发送一个jquery get请求,如下所示: $.get($(this).attr("href"), $(this).serialize(), null, "script"); 我期望收到的响应将包装在脚本标记中 我知道浏览器不会执行响应,除非返回的响应没有脚本标记。通常我会从响应中删除标记,但在这种情况下,我无法访问远程机器上运行的代码,因此无法从源代码中删除标记 是否有一种方法可以从响应客户端剥离脚本标记并执行javascript?如果我正确理解您的问题,这应该足以从脚本标记中提取文

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

$.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
      });