我正在发送一个jquery get请求:
$.get($(this).attr("href"), $(this).serialize(), null, "script");
我希望收到的回复将包含在脚本标记中。
我理解浏览器不执行响应,除非它返回没有脚本标记。通常我会从响应中删除标签,但在这种情况下,我无法访问远程计算机上运行的代码,因此无法在源处删除标签。
有没有办法可以从响应客户端剥离脚本标记并执行javascript?
答案 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)
答案 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
});
并滚动你自己的