首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JavaScript中的stackapps与XMLHttpRequest或XDomainRequest结合使用?

如何将JavaScript中的stackapps与XMLHttpRequest或XDomainRequest结合使用?
EN

Stack Apps用户
提问于 2010-05-27 19:25:01
回答 1查看 373关注 0票数 1

我想出了一个需要从JavaScript调用stackapps的应用程序的想法,但是当我开始对它进行原型化时,我很快发现这个API不允许跨源请求。这意味着试图在另一个域上通过JavaScript检索JSON对象将失败,因为浏览器会因为同源政策而阻止它。这通常也是Flash和Silverlight请求的一个问题,但我确实看到,API已经实现了闪存crossdomain.xml (示例)和银灯clientaccesspolicy.xml (示例)文件,以允许使用插件进行跨源请求。

虽然我可以使用Flash或Silverlight来代替JavaScript,但它是一个非常简单的应用程序,只需要访问几个方法调用。另外,我已经看到了对JavaScript包装器的请求,但是如果不允许跨源请求,包装器就不会有多大用处。有一个很少有不同的方法绕过相同的起源策略,但其中大多数涉及大量工作或不兼容基于IP的速率限制所使用的API。我认为可以使用两种主要方法来允许使用javascript访问API:

  1. Access-Control-Allow-Origin: * http报头添加到所有API方法中。这允许在大多数浏览器中使用XMLHttpRequest对象或在IE8中使用XDomainRequest对象的跨域请求。
  2. 向每个方法中添加一个type=jsonp参数,通过下载JSON对象作为动态脚本标记,而不是原始JSON文本,然后将其传递给用户定义的回调函数,从而使用按需Javascript软垫JSON方法绕过相同的原始策略。

这两种方法各有优缺点,但我认为最简单的方法是添加访问控制头。为了展示这个问题和潜在解决方案的例子,我设置了一个测试页,它应该与IE8、Firefox、Chrome和Safari一起工作。测试页面允许您尝试使用XMLHttpRequest或XDomainRequest对象下载各种文件,并查看相同的源策略和访问控制头对每个文件的影响。您还可以使用web-sniffer.net站点来检查每个请求的URL的headers。

EN

回答 1

Stack Apps用户

回答已采纳

发布于 2010-05-27 19:39:29

JSONP支持最近被添加到API ( 见这个问题 )中。

要触发填充的参数名为jsonp

http://api.stackoverflow.com/0.8/tags?jsonp=blah

票数 2
EN
页面原文内容由Stack Apps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackapps.com/questions/320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档