我一直在使用JavaScript和AJAX很長一段時間,我想了解跨域XHR是如何工作的以及JQuery如何處理它,出於某種原因,我從來沒有想過如何去思考真的行。我已閱讀Wikipedia JSONP文章,我更困惑。我不確定我不瞭解的是什麼。瞭解跨域XHR和XML數據
我知道,使用JSONP
我可以直接在JavaScript中使用JSON
數據。例如this JS Fiddle example。這裏我使用JSON
來顯示圖像列表。我可以使用XML
數據來取得同樣的效果嗎?在回答這部分問題之前,請先閱讀其餘的比喻。
1)如果我嘗試像下面或Fiddle link我得到錯誤Uncaught ReferenceError: jsonFlickrFeed is not defined
$.ajax({
url: "http://api.flickr.com/services/feeds/photos_public.gne",
data: {
format: "json"
},
dataType: "jsonp",
success: function(d) {
console.log(d);
}
});
2)實例下或fiddle link工作正常
$.ajax({
url : "http://api.flickr.com/services/feeds/photos_public.gne",
data: {format: "json"},
dataType: "jsonp"
});
jsonFlickrFeed = function(d){
console.log(d);
}
Q)我1和2之間的假設,因爲返回數據格式爲jsonFlickrFeed({})
我們需要編寫jsonFlickrFeed回調函數使其工作? Q)爲什麼它不會調用成功回調? Q)返回JSONP的工作(我的意思是數據的格式爲jsonFlickrFeed({})
)是否是Flickr的終點?或者它只是返回實際的JSON和JQuery墊?
3)隨着$.getJSON
的代碼是一樣的東西下面或fiddle
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
format: "json"
}, function(d) {
console.log(d)
});
Q)如何JQuery的照顧它的情況下,3)?我看到返回的數據格式爲jQuery1820349100150866434_1355379638775({})
因此,如果我假設JQuery將JSON與回調關聯的工作是正確的? Q)由於上述原因,它被稱爲JQuery的簡寫方法?
無論我嘗試過,我都無法使用XML數據。我一直沒有想到使用XML數據而不是JSON的方式。
Q)是否有可能以類似的方式使用XML數據而不是JSON? Q)我能想到的唯一方法就是通過同一個域代理數據。這種理解是否正確?
如果這裏的幫助是XML example我有保管箱。這是爲了演示XML數據源於同一個域時可以解析它。
對上述所有問題都有一個簡單的答案; JSONP通過在頁面中插入腳本標記來工作,就像任何腳本標記一樣,這就是爲什麼一些常規函數不起作用的原因,因爲它不是真正的XMLHttpRequest。至於以同樣的方式獲取XML,不可能(這是不可能的(獲取XML當然是可能的,只是與JSONP不一樣)。 – adeneo
你看過CORS嗎? http://en.wikipedia.org/wiki/Cross-origin_resource_sharing如果您的瀏覽器要求不太寬泛(http://caniuse.com/cors),那麼這是一種更直接的方式來完成跨域XHR。 – joshuacronemeyer
@joshuacronemeyer是的,我有。這在大多數情況下都沒有幫助。對我來說,JSON不是問題,它消耗了XML。 – ch4nd4n