我使用 JavaScript 和 AJAX 已经有一段时间了,我想了解 Cross Domain XHR 是如何工作的以及 JQuery 是如何处理它的,出于某种原因,我从来没有想过它是如何工作的。我已经阅读了Wikipedia JSONP文章,我更加困惑。我不确定我不明白什么。
我知道使用JSONP
我可以JSON
直接在 JavaScript 中使用数据。例如这个 JS Fiddle 例子。在这里,我JSON
用来显示图像列表。我可以使用XML
数据来实现同样的目标吗?在回答这部分问题之前,请阅读类比的其余部分。
1)如果我尝试类似下面的东西或小提琴链接我得到错误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)下面的例子或小提琴链接工作正常
$.ajax({
url : "http://api.flickr.com/services/feeds/photos_public.gne",
data: {format: "json"},
dataType: "jsonp"
});
jsonFlickrFeed = function(d){
console.log(d);
}
问)我想在 1 和 2 之间,因为返回的数据格式就像jsonFlickrFeed({})
我们需要编写 jsonFlickrFeed 回调函数才能使其工作?
Q) 为什么它从不调用成功回调?
Q) 是 Flickr 端点完成返回 JSONP 的工作吗(我的意思是格式中的数据jsonFlickrFeed({})
)?或者它只是返回实际的 JSON 和 JQuery 填充它?
3)$.getJSON
代码如下所示或小提琴
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
format: "json"
}, function(d) {
console.log(d)
});
Q) 在案例 3) 中 JQuery 如何处理它?我看到返回的数据是格式jQuery1820349100150866434_1355379638775({})
所以如果我假设 JQuery 完成将 JSON 与回调关联的工作是否正确?
Q) 由于上述原因,它被称为 JQuery 的速记方法?
无论我尝试什么,我都无法使用 XML 数据。我一直想不出一种使用 XML 数据而不是 JSON 的方法。
Q) 是否可以以类似的方式使用 XML 数据而不是 JSON?
Q) 我能想到的唯一方法是通过同一个域代理数据。这种理解正确吗?
如果它在这里有帮助的话是我在 Dropbox 上的XML 示例。这是为了证明当 XML 数据来自同一个域时,它可以被解析。