2011-07-06 44 views
1

我正在使用Jquery 1.6.2。JQUERY JSONP问题

这工作:

$.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=?

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

回答

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"}); 

为了解决这个问题,你可以,如果你设置使用jsonpCallback参数在Ajax请求强制jQuery的使用静态函数,你会再包装你的JSON英寸

例如jsonpCallback为“myCallBack函数”,那么你的文本文件,应返回:

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

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