有没有办法只使用JavaScript从另一个域加载XML文件?
jQuery具有$.getJSON()函数,我使用该函数从其他域加载json文件,如下所示:有没有办法只使用JavaScript从另一个域加载XML文件?,javascript,jquery,xml,json,Javascript,Jquery,Xml,Json,jQuery具有$.getJSON()函数,我使用该函数从其他域加载json文件,如下所示: $.getJSON('http://somesite.com/file.js', function(output) { // do stuff with the json data }); 我想知道我是否可以对来自其他域的xml文件执行相同的操作,或者我是否必须使用服务器端语言来执行此操作 这是我要加载的xml文档: 你可以试试这个 $.ajax({ type: "GET", da
$.getJSON('http://somesite.com/file.js', function(output) {
// do stuff with the json data
});
我想知道我是否可以对来自其他域的xml文件执行相同的操作,或者我是否必须使用服务器端语言来执行此操作
这是我要加载的xml文档:
你可以试试这个
$.ajax({
type: "GET",
dataType: "xml",
url:"localhost/grab.php",
success: function(){
//to do when success
}
});
1) 使服务作为代理从url获取内容
grab.php代码中的示例:
<?php
$url = 'http://google.com/complete/search?output=toolbar&q=microsoft';
$parsing = parse_url($url);
$scheme = $parsing[scheme];
$baseurl = basename($url);
$strbase =$baseurl;
$finalUri = $scheme .'://' .$strbase;
$handle = fopen($finalUri, "r",true);
// If there is something, read and return
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}
我同意@viyancs,简单地说,如果您想要获取其他域的xml,则存在跨域限制,解决此问题的方法是创建代理,因此请求过程是:
一,。使用$.ajax请求您的代理(使用您想要访问的真实xml url)
二,。您的代理检索xml url内容
三,。代理将内容返回给$.ajax调用
有关更多详细信息,请查看:
顺便说一句:为什么你不必为JSON这么做?这是一种称为.的技术,如果您真的没有能力使用带有缓存的代理(这是一种适当的礼仪),您可以使用类似的方法。如果没有API密钥,您最终会达到一个极限
// query: select * from xml where url='http://google.com/complete/search?output=toolbar&q=microsoft'
var xml_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fgoogle.com%2Fcomplete%2Fsearch%3Foutput%3Dtoolbar%26q%3Dmicrosoft'&diagnostics=true"
$.get(xml_url,function(xml){ console.log(xml); });
你的回答似乎太复杂了,为什么他需要创建一个服务?您的php代码似乎没有给他任何新信息?我正在使用grab.php修复跨域问题,因为如果他执行“$.ajax”({type:“GET”,dataType:“xml”,url:,success:function(){//to do when success}});”回答是禁止的,我只是给出解决方案,我得到同样的问题,这是我的工作。谢谢,我明白了,你正在使用自己的服务器作为代理。也许清楚地说明问题,解决方案可能比具体的代码更好——只是我的意见:)是的,我会更新代码使其更好。谢谢你的关注。:)如果你说的javascript是指在浏览器中运行的客户端javascript,那么不,由于浏览器中内置的同源策略限制,无法阻止类似的情况发生。