当前位置: 首页 > 面试题库 >

了解跨域XHR和XML数据

弘焕
2023-03-14
问题内容

我已经使用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数据来自同一域时可以对其进行解析。


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我正在使用JSONP进行api跨域请求,并且外部服务器以XML返回我的结果,以下是我的代码: 它返回给我一个xml,但随之产生一个错误,提示“意外令牌<”,不幸的是停止了我的处理,但我没有收到警告消息。任何想法? 最好 问题答案: 正如上面的评论中提到的那样,除非您能够控制吐出XML的应用程序并可以使用格式化技巧来“欺骗”脚本以将其解析为JSON,否则javascript的跨域xml是

  • 问题内容: 我对带有HTTP授权标头的CORS请求有疑问: 在我看来,Web浏览器未通过POST请求发送Authorization标头,是否有解决方法? 这是我的Angular代码: 在服务器端,我在web.config中有这个 问题答案: 您使用不正确。第二个参数是您需要发送到服务器的 数据 ,您不能设置这样的标头。在您的情况下,它将把 整个对象 作为 JSON有效负载 发送 __ 试试这个:

  • 主要内容:1.@CrossOrigin,2.网关整合,3.Httpclient因为浏览器的同源政策,就会产生跨域。比如说发送的异步请求是不同的两个源,就比如是不同的的两个端口或者不同的两个协议或者不同的域名。由于浏览器为了安全考虑,就会产生一个同源政策,不是同一个地方出来的是不允许进行交互的。 1.@CrossOrigin 在控制层加入允许跨域的注解,即可完成一个项目中前后端口跨域的问题 2.网关整合 作为Spring Cloud生态系统中的网关,目标是替代,其 不仅提供统

  • 主要内容:1.@CrossOrigin,2.网关整合,3.Httpclient因为浏览器的同源政策,就会产生跨域。比如说发送的异步请求是不同的两个源,就比如是不同的的两个端口或者不同的两个协议或者不同的域名。由于浏览器为了安全考虑,就会产生一个同源政策,不是同一个地方出来的是不允许进行交互的。 1.@CrossOrigin 在控制层加入允许跨域的注解,即可完成一个项目中前后端口跨域的问题 2.网关整合 作为Spring Cloud生态系统中的网关,目标是替代,其 不仅提供统

  • 问题内容: 在我的JS项目中,我需要从跨域加载数据。(JavaScript位于域A上,数据来自域B) 我有一个使用JSONP的解决方案,但是我确实需要加载XML(普通XML音乐播放列表)。主要目标是能够加载和解析XML数据,而无需先将其修改为其他格式(例如JSONP)。 完全不可能吗? 还是有任何解决方法或黑客措施? 我主要针对iOS上的最新浏览器。 谢谢! PS:easyXDM对您有帮助吗?还是

  • 问题内容: 我在尝试使用跨域请求制作jquery.form时遇到了困难。我在Firefox和Chrome上遇到问题(甚至还没有尝试IE)。 说明:我的整个网站都位于http://www.mysite.com内。但是,我的联系表在另一台服务器上,由http://contact.mysite.com引用。我认为将其放在子域上可以避开有关跨域请求的问题,但显然没有。在Sinatra中实现了http://