我正在使用Jquery 1.6.2.
这有效:
$.getJSON("http://b.webvm.net/?jsoncallback=?",
function(data) {
alert("OK");
});
});
Run Code Online (Sandbox Code Playgroud)
但这不是:
$.getJSON("http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?",
function(data){
alert("OK");
});
});
Run Code Online (Sandbox Code Playgroud)
两个远程文件看起来都相同
http://b.webvm.net/?jsoncallback=?
和
http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?
但是警告消息永远不会在第二个示例中被触发.
文本文件不像其他链接那样提供回调函数.jQuery实际上并没有调用http://b.webvm.net/?jsoncallback=?但更像是http://b.webvm.net/?jsoncallback=jQuery2239203480932480392849032809,然后在你的脚本中调用该函数:
jQuery2239203480932480392849032809({"name" : "hello world"});
Run Code Online (Sandbox Code Playgroud)
另一方面,文本文件即使在jQuery添加回调函数时也不调用任何函数http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=jQuery2239203480932480392849032809返回
({"name" : "hello world"});
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,您可以使用jsonpCallbackajax请求中的参数来强制jQuery使用静态函数,然后将json包装在其中.
例如,如果设置jsonpCallback为"mycallback",则应返回文本文件:
mycallback({"name" : "hello world"});
Run Code Online (Sandbox Code Playgroud)