小编典典

了解跨域XHR和XML数据

ajax

我已经使用JavaScript和AJAX已有一段时间了,我想了解Cross Domain
XHR的真正工作原理以及JQuery的处理方式,出于某种原因,我从来没有想过它的真正工作原理。我已经阅读了Wikipedia
JSONP
文章,我更加困惑。我不确定我不了解什么。

我知道使用JSONP可以JSON直接在JavaScript中使用数据。例如这个JS
Fiddle示例
。在这里,我JSON用来显示图像列表。我可以使用XML数据来实现相同的目的吗?在回答问题的这一部分之前,请先阅读类比的其余部分。

1)如果我尝试以下或Fiddle链接则会出现错误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回调函数才能使其正常工作?

问)为什么它从不调用成功回调?

问)Flickr端点是否返回JSONP(我的意思是格式为data
jsonFlickrFeed({}))的工作?还是只是返回实际的JSON和JQuery填充?

3)用$.getJSON下面的代码或小提琴来编写代码

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
    format: "json"
}, function(d) {
    console.log(d)
});​

问)在情况3)中,JQuery如何处理它?我看到返回的数据采用格式,jQuery1820349100150866434_1355379638775({})因此,如果我假设JQuery能够完成将JSON与回调相关联的工作,是否正确?

问:由于上述原因,它被称为JQuery的速记方法?

无论如何,我都无法使用XML数据。我还没有想到使用XML数据而不是JSON的方法。

问)是否可以类似的方式使用XML数据而不是JSON?

问:我能想到的唯一方法是通过同一域代理数据。这种理解正确吗?

如果有帮助,这里是我在保管箱上的XML示例。这是为了证明当XML数据来自同一域时可以对其进行解析。


阅读 340

收藏
2020-07-26

共1个答案

小编典典

@adeneo回答了问题,但发表了评论。因此,我的理解JSONP存在根本缺陷。发出JSONP请求时,它不是XHR请求。相反,警告是script动态插入标签并获取JSON。因此,即使调用看起来像XHR(至少是IMO
JQuery),事实并非如此。完全不使用XMLHttpRequest对象。

这个问题已经回答了JSONP的全部含义是什么?但我以前还是想念它。另一个解释跨域请求的好资源在devlog上

我提出的其他问题变得多余了!

2020-07-26