我这里有一个测试页面,应该只执行一次jQuery JSONP跨域请求,但是两次:
http://www.starcitygames.com/json_test.php
它应该在这里查询此页面以获取一些测试数据:
http://scg.im/ajax/fetch_recent_URLs.php?callback=fred
在我整个早上把头撞到墙上后,我从这个脚本,pro或con得到绝对零响应,我在fetch_recent_URLs脚本中放了一个mail()调用,只要加载了远程页面就给我发邮件。
事实证明,尽管脚本有多次加载,调整等,但它实际上从未调用过scg.im页面。该脚本没有被破坏,在JavaScript中没有返回任何致命错误等等 - 它实际上似乎并没有激发AJAX调用。
更令人困惑的是,常规JSON调用(到此域)工作正常。
脚本是这样的:
$.ajax({
url: "http://scg.im/ajax/fetch_recent_URLs.php",
type: "GET",
dataType: "jsonp",
error: function(xhr, status, error) {
alert("error");
},
success: function(json) {
alert("success");
}
});
$.getJSON("http://scg.im/ajax/fetch_recent_URLs.php?callback=?", function(rtndata) {
alert("Returned!");
});
两者均来自声称此作品的各种测试页。我也尝试过jQuery 1.6,更改了标题等,都遇到了同样的问题;无论我做什么,jQuery都不会真正调用页面。 (同样,我知道这是因为脚本每次加载时都会给我发邮件,当我加载此页面时它根本不会给我发电子邮件。)
知道为什么这不起作用?据我所知,我正在根据计划(以及这些脚本的大约五种变体来启动)。
编辑:已解决!我想出来了,这完全是愚蠢的。
如果您为FireFox启用了NoScript(并且您可以说应该),并且您不允许来自新域的脚本(在本例中为scg.im),那么NoScript将在它开始之前阻止域请求。安全性很好。彻底莫名其妙。