JQUERY JSONP问题

use*_*839 1 jquery jsonp

我正在使用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=?

但是警告消息永远不会在第二个示例中被触发.

Nik*_*las 5

文本文件不像其他链接那样提供回调函数.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)