Javascript 获取xml跨域调用不一致
我整个上午都在围绕这个主题阅读,但我仍然对结果感到困惑 据我所知,JQuery.ajax.get不应该使用datatype=“xml”跨浏览器工作,但是下面的rs提要可以工作Javascript 获取xml跨域调用不一致,javascript,jquery,xml,ajax,Javascript,Jquery,Xml,Ajax,我整个上午都在围绕这个主题阅读,但我仍然对结果感到困惑 据我所知,JQuery.ajax.get不应该使用datatype=“xml”跨浏览器工作,但是下面的rs提要可以工作 var rssurl=http://gdata.youtube.com/feeds/base/videos/-/trees?orderby=published&alt=rss'; 然而,当我尝试调用另一个提要时,它不起作用。它给出了一个解析错误 var rssurl=http://api.flickr.com/ser
var rssurl=http://gdata.youtube.com/feeds/base/videos/-/trees?orderby=published&alt=rss';
然而,当我尝试调用另一个提要时,它不起作用。它给出了一个解析错误
var rssurl=http://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=rss2“
现在,当我在本地复制并调用它时,这个提要不起作用,确实起作用。这就是为什么我认为这是一个跨领域的问题
另外,在Fiddler中查看时,我可以看到提要实际上是下载的。我觉得奇怪的是,如果这是一个跨域调用,为什么会出现这种情况,它肯定会在提取提要之前停止
下面的代码拉进饲料
$.ajax({
键入:“获取”,
网址:rssurl,
数据类型:“xml”,
成功:函数(数据、文本状态、jqXHR){
document.write(“获取提要:+textStatus+”
”;
var$xml=$(数据);
$xml.find(“item”).each(函数(){
变量$this=$(this),
document.write($this.find(“title”).text());
});
},
错误:函数(jqXHR、textStatus、errorshown){
警报(“故障”);
console.log('status:'+textStatus);
如果(textStatus=='error')
console.log(错误抛出);
}
);
关于我的问题:
HTTP/1.1 200 OK
X-GData-User-Country: FR
Access-Control-Allow-Origin: http://fiddle.jshell.net
Content-Type: text/xml; charset=UTF-8
Expires: Fri, 01 Jun 2012 19:41:43 GMT
Date: Fri, 01 Jun 2012 19:41:43 GMT
Cache-Control: private, max-age=1800, no-transform
Vary: *
GData-Version: 1.0
Last-Modified: Fri, 01 Jun 2012 19:41:43 GMT
Content-Encoding: gzip
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
因此,您可以看到,您被授权嵌入内容(在这里,我向小提琴手询问,因此服务器可能只回答“*”,意思是所有来源,而不必对标题的这一部分进行个性化设置)
结论是合乎逻辑的:如果服务允许,您可以包含跨域部分
请记住,它主要是一个浏览器侧锁,保护您作为用户(以及您的数据)不被注入。指定浏览器请求服务器授权将内容嵌入来自另一个来源的框架中。所有现代浏览器都遵守这一规范
当你问api.flickr.com时,它没有给你授权
但当你问gdata.youtube.com时,它会回答以下标题:
HTTP/1.1 200 OK
X-GData-User-Country: FR
Access-Control-Allow-Origin: http://fiddle.jshell.net
Content-Type: text/xml; charset=UTF-8
Expires: Fri, 01 Jun 2012 19:41:43 GMT
Date: Fri, 01 Jun 2012 19:41:43 GMT
Cache-Control: private, max-age=1800, no-transform
Vary: *
GData-Version: 1.0
Last-Modified: Fri, 01 Jun 2012 19:41:43 GMT
Content-Encoding: gzip
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
因此,您可以看到,您被授权嵌入内容(在这里,我向小提琴手询问,因此服务器可能只回答“*”,意思是所有来源,而不必对标题的这一部分进行个性化设置)
结论是合乎逻辑的:如果服务允许,您可以包含跨域部分
请记住,它主要是一个浏览器侧锁,保护您作为用户(以及您的数据)不被注入。回答您的问题:
您提出了一个有趣的观点,即某些浏览器确实加载了文件(经Fiddler确认)。相比之下,IE根本不加载文件。我不知道答案,但听听对这一点的解释会很有趣。回答您的问题:
您提出了一个有趣的观点,一些浏览器确实加载了文件(Fiddler证实了这一点).IE完全不加载文件。我不知道答案,但听一下关于这一点的解释会很有趣。您是否检查了网络控制台以查看是否在HTTP响应中设置了标头?您是否检查了网络控制台以查看是否在HTTP响应中设置了标头?