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

时间:2009-06-10 20:54:55

标签: javascript ajax jquery

我正在发送一个jquery get请求:

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

我希望收到的回复将包含在脚本标记中。

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

有没有办法可以从响应客户端剥离脚本标记并执行javascript?

6 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:4)

或者:

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

答案 2 :(得分:2)

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

  

$(response).text()

答案 3 :(得分:2)

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

答案 4 :(得分:0)

说我们的回答是'响应'var:

script = response.replace(/<script>(.*)<\/script>/, "$1"); // Remove tags
eval(script); // Execute javascript

答案 5 :(得分:0)

我的做法略有不同,并使用php land使其更容易。 (我不喜欢使用eval,也不喜欢巨大的重写)。

我将所有jquery放在一个像这样的php字符串中(现实生活中有更多的JavaScript)

JPanel

然后也在php land

    $out .= "       $('#save_now').button(); \n";
    $out .= "       $('#save_now').click( function() {\n";
    $out .= "          return false;\n";
    $out .= "       }); \n";

然后在jQuery $ .ajax调用中我这样做

    echo "<script>\n";
    echo "  function onOpen(){ \n";
    echo $out;
    echo "  } \n";
    echo "</script>\n";

正如你所看到的那样,你不需要知道php的内容,它只是在我的代码库中,我确实需要这样做。诀窍是取消 $.ajax({ url: geturl, type: 'post', data: getparams, success: function(data) { mydiv.html(data); onOpen(); }, cache: false }); 并滚动你自己的