JavaScript,JSONP和从跨域读取XML

时间:2011-04-07 09:29:12

标签: javascript xml json cross-domain jsonp

在我的JS项目中,我需要从跨域加载数据。 (JavaScript位于域A,数据来自域B)

我有一个使用JSONP的解决方案,但我确实需要加载XML(普通的XML音乐播放列表)。主要目标是能够加载和解析XML数据,而无需先将其修改为其他格式(如JSONP)。

完全不可能吗?或者有任何变通方法或黑客攻击吗?

我主要针对iOS上的最新浏览器。

谢谢!

PS:easyXDM可以提供任何帮助吗?或者它与XML无关?

更新:遗憾的是我不能使用代理,我真的在问一个直接的解决方案。

4 个答案:

答案 0 :(得分:2)

您可以完全执行此操作,只需让您的域名B返回类似

的内容
func("<myxml></myxml>");

var someVar = "<myxml></myxml>";

名称 JSONP 与JSON没有任何关系,因为它的概念完全是关于执行将数据嵌入代码中的JavaScript。

一旦您的域名B完全返回上述两个表单中的一个,域名A就可以通过以下方式使用它:

<script>
function func(xmlString) {
    alert(xmlString); // you can parse the xmlString with 
                      // jQuery or something else
}
</script>

或者如果你使用第二个例子:

<script>
alert(someVar);
</script>

答案 1 :(得分:1)

通常的解决方案是拥有一个“AJAX代理” - 一个在您的域上运行的简单服务器端脚本,从另一个域获取数据并保持不变。

简化是为脚本提供您需要以下数据的URL:

http://example.com/proxy.php?url=http%3A%2F%2Fexample.org%2Fajax%3Fid%3D123http://example.org/ajax?id=123

获取数据

如果你让任何URL被这样提取,那么这可能会被误用,所以你应该有你的脚本,检查它实际上只从特定的URL获取数据。

为了避免解析URL以进行检查,您可以专门为您的应用编写代理,只访问您需要的特定资源:

http://example.com/proxy.php?id=123访问http://example.org/ajax?id=123

答案 2 :(得分:1)

如果你有一个JSON-P解决方案,你可以将XML作为字符串传递给JSON-P回调。然后,您可以执行XML parsing of a variable string in JavaScript

答案 3 :(得分:1)

JSONP的整个想法是响应必须可执行为脚本。当然,你可以传回XML数据,只要它是有效的Javascript - 例如,服务器可以将其响应包装在一个字符串中:

myCallback('<xml><stuff/></xml>')

你必须用jQuery解析它:

success: function(data) { 
    var xml = $(data); // now do stuff 
}

这假设您控制其他服务器和/或有兴趣以这种方式格式化其数据的人。否则,你运气不好,需要某种代理 - 你可以do this with YQL