[英]JavaScript, JSONP and reading XML from cross-domain
您完全可以做到这一点,只需让您的域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%3D123
从http://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.