2010-02-01 40 views

回答

5

其他域/服務器需要支持JSONP,基本上包裝了JSON的回調。

在jQuery中,呼叫是這樣的:

$.getJSON(
    'http://otherdomain.com/api/whatever?callback=?', 
    { key: 'value', otherkey: true }, 
    function(data){ 
     //handle response 
    } 
); 

來自其他服務器的實際響應(如果你看實際發送的是什麼)是這樣的:

// With this url: 
http://domain.com/api/method?callback=the_callback_function_name 

// The response would look like this: 
the_callback_function_name({ "json": "data here"}); 

當您提供額外的callback=?時,jQuery getJSON方法會自動處理JSONP。請記住一些使用不同名稱的網站,例如json_callback=?。最重要的是,你把它作爲URL的一部分,不要嘗試添加callback: '?'getJSON功能的data一部分。

+0

據我只是跑測試,FF2,IE6和IE8(全部使用默認安全設置)阻止,因爲同源策略的方法。 FF3.5和Safari4.0沒有。 IE給了「權限被拒絕」的錯誤信息。 FF2提供了我在本頁其他地方引用的錯誤消息。 – 2010-02-01 20:32:05

+0

@fsb然後你運行了一個不正確的測試。不好意思,但是JSONP在任何瀏覽器中都沒有被封鎖,可以說任何市場份額。 – 2010-02-01 22:03:28

+0

@fsb使用您的默認安全設置,運行以下頁面:http://jsbin.com/olixe。它將在FF2 +,Safari 3+和IE6 +中工作 - 沒有錯誤或限制。 – 2010-02-01 22:14:48

4

只有通過JSONP。無論你使用jQuery或其他一些框架,它歸結爲這樣一個腳本塊:

<script type="text/javascript" src="http://path.to/your/javascript"></script> 

<script>塊是從跨域限制的免疫。需要注意的是該服務也應該支持JSONP。如果腳本返回像這樣的JSON對象:

{a: 0, b: 1} 

該對象將被評估,但沒有任何反應。但JSONP服務接受一個回調函數的名字是這樣的

<script type="text/javascript" src="http://path.to/your/javascript?callback=yourCallbackFunction"></script> 

和包裝數據作爲參數傳遞給你的回調是這樣的:

yourCallbackFunction({a: 0, b: 1}); 

這樣當腳本被評爲函數被調用。

0

相反,你應該使用本地代理。設置一個asp.net/php頁面,該頁面將加載後端的遠程頁面,然後使用ajax加載代理頁面。

相關問題