我必须做些什么来规避JSON的JavaScript同源策略...这对XML数据也有效吗?

时间:2010-12-22 03:39:50

标签: javascript jsonp same-origin-policy

我对同一起源政策有疑问......

我有使用JSON和XML数据的JavaScript代码。我知道我需要将JSON更改为JSONP,因为我的服务器位于不同的域上,但我是否只在客户端执行此操作?那么XML数据呢?也可以以某种方式加载跨域?

最后,是否有任何好的网站通过示例进行深入解释?

3 个答案:

答案 0 :(得分:0)

在您的jsonp响应中对您的XML进行编码,然后让您的客户端将其解压缩并将其解释为XML。

答案 1 :(得分:0)

您必须修改服务器。您可以使用JSONP的XML原则。你只需要传递一个字符串:

E.g。假设您的服务器端程序位于/ xmlp。您传递callback参数,然后脚本将XML输出包装在其中。

E.g。

/xmlp?callback=mycall

输出:

mycall('<root><el attr="value"/ ></root>');

然后在客户端解析XML(传递给JavaScript mycall函数)。

答案 2 :(得分:0)

只要数据源位于不同的域中,就必须使用JSONP来获取数据。这适用于JSON和XML数据。 JSONP只是一个声明,它使您可以提供回调函数,并在远程调用完成后立即调用它。数据作为回调参数提供。

原因,您的API必须支持JSONP,一旦API请求包含“?callback = f”,它就必须返回类似

的内容
{ f(data); }

和f - 是在页面上某处定义的函数。

因此,基本上当API调用完成后,调用回调函数。

您可以使用多种选项来使用来自不同来源的API

  1. 使用YQL - http://developer.yahoo.com/yql/
  2. 手动,纯JS或jQuery - http://www.beletsky.net/2010/07/json-jsonp-and-same-origin-policy-issue.html