繁体   English   中英

JavaScript,JSONP并从跨域读取XML

[英]JavaScript, JSONP and reading XML from cross-domain

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

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

完全不可能吗? 还是有任何解决方法或黑客措施?

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

谢谢!

PS: easyXDM对您有帮助吗? 还是与XML不相关?

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

您完全可以做到这一点,只需让您的域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>

通常的解决方案是在您的域上运行一个“ 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

如果您有JSON-P解决方案,则只需将XML作为字符串传递给JSON-P回调。 然后,您可以在JavaScript中对变量字符串进行XML解析

JSONP的整体思想是,响应必须可以作为脚本执行 因此,可以肯定的是,只要XML数据是有效的Javascript,就可以将其传回。例如,服务器可以将其响应包装在字符串中:

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

而且您必须使用jQuery进行解析:

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

假定您控制其他服务器和/或某个对以这种方式格式化其数据感兴趣的人。 否则,您很不走运,需要某种代理-您可以使用YQL做到这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM