2011-07-06 118 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