混搭如何与同组织政策一起工作?


Answers:


7

跨浏览器解决方案

JSONP

如果您要访问的API支持JSONP,则只需在请求中提供一个javascript函数名称,然后JSONP返回的javascript myfunc({the:data});就可以像常规javascript一样运行,这就是为什么要创建一个新<script src="www.website.com/somecall?jsonp=myfunc">标签来“发送请求”(如果您type: jsonp$.ajax请求中使用,jQuery会自动执行此操作)。

缺点是它要求API的提供程序支持JSONP。

只要目标网站crossdomain.xml的根目录上有一个文件允许它访问Flash ,它就可以访问跨域内容(在提供API的服务器上通常是这种情况)。

不利之处在于,它需要用户浏览器中的Flash,并且您从中获取数据的网站必须具有crossdomain.xml,以允许跨域请求。

同一域名上的服务器端脚本

像PHP这样的服务器端语言没有BS同域限制,因此您可以拥有一个充当代理的脚本(例如,通过诸如cURL之类的http扩展名之一下载)。

额外的好处是,您可以在将数据转发到网页/ javascript之前清理服务器上的数据(甚至是多个源的mashup),因此您甚至可以仅提取数据的有用部分,这在移动Web应用程序中非常有用带宽可能是一个问题。

缺点是所有请求都必须通过服务器,这样会增加服务器的负载。

但是好处是它可以与任何资源一起使用,因为它不需要目标支持跨域或jsonp。因此,如果没有其他效果,那就可以了。


特定于某些浏览器的解决方案

IE浏览器

Internet Explorer具有跨域请求

火狐浏览器

Firefox 3.5+具有跨域共享标准,但是它需要您尝试访问的资源包括特殊的标头,例如PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

其他一些主要的浏览器也支持此功能,因此,如果您不需要支持旧的浏览器,并且可以获取尝试访问的资源以发送这些标头,那么这可能是您最好的选择,否则可能是服务器端脚本将是我的建议。


Firefox也具有用户设置capability.policy.default.XMLHttpRequest.open,但是我不希望用户在其浏览器中更改设置。


0

您可以为此使用(另一个域的)API。您的Javascript将调用您的Web服务器(您的域)上的PHP文件(或其他脚本文件),该文件将调用(使用CURL的另一个域的)API,并获得响应。


对于服务器上使用的技术,此答案不必如此具体。
funkybro 2011年

@funkybro是的,这只是一个例子……没什么特别的……
Harish Kurup
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.