JQUERY JSONP问题

时间:2011-07-06 15:19:11

标签: jquery jsonp

我正在使用Jquery 1.6.2。

这有效:

$.getJSON("http://b.webvm.net/?jsoncallback=?",
    function(data) {
        alert("OK");
    });
});

但这不是:

$.getJSON("http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?",
    function(data){
        alert("OK");
    });
});

两个远程文件看起来都相同:

http://b.webvm.net/?jsoncallback=?

http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?

然而警告消息永远不会在第二个例子中被触发。

2 个答案:

答案 0 :(得分:5)

文本文件不像其他链接那样提供回调函数。 jQuery实际上并没有调用http://b.webvm.net/?jsoncallback=?但是像http://b.webvm.net/?jsoncallback=jQuery2239203480932480392849032809这样的东西然后在你的脚本中调用该函数:

jQuery2239203480932480392849032809({"name" : "hello world"});

另一方面,文本文件即使在jQuery添加回调函数http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=jQuery2239203480932480392849032809返回

时也不调用任何函数
({"name" : "hello world"});

要解决此问题,您可以在ajax请求中使用jsonpCallback参数来强制jQuery使用静态函数,然后将json包装在其中。

例如,如果您将jsonpCallback设置为“mycallback”,那么您的文本文件应该返回:

mycallback({"name" : "hello world"});

答案 1 :(得分:0)

我注意到第一个示例是使用mime类型“text / html”返回的,第二个示例是以“text / plain”返回的。您的浏览器可能无法正确解释“text / plain”mime类型。尝试以text / html或application / json

返回第二个