跨域 AJAX 读取 XML

Posted

技术标签:

【中文标题】跨域 AJAX 读取 XML【英文标题】:Cross-Domain AJAX to Read XML 【发布时间】:2013-08-19 05:33:03 【问题描述】:

这里是菜鸟。我正在编写一个需要从另一个域读取 XML 文件的客户端脚本。我尝试使用 JSONP。我收到 200 响应,但客户端由于某种原因无法访问返回的数据。我收到两个错误:

Resource interpreted as Script but transferred with MIME type text/xml

Uncaught SyntaxError: Unexpected token <

这是代码(我已经删除了 XML url,因为它是机密的):

$(document).ready(function() 
  $.getJSON("urlOfFilecallback=?", function(data) 
  console.log(data)
 )
);

当我尝试在控制台中呈现数据时,我得到:

ReferenceError: data is not defined

我该如何解决这个问题?我需要使用代理吗?

【问题讨论】:

【参考方案1】:

您不必编写自己的代理。如果你愿意,你可以使用 YQL 这里是一个例子:

//sample site that returns xml
site = 'http://goo.gl/9iQWyG';


var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?';

// Request that YSQL string, and run a callback function.
// Pass a defined function to prevent cache-busting.
$.getJSON(yql, function(data)
    console.log(data.results[0]);
);

这里是jsfiddle 检查console.log。

(公共 YQL API 的Usage limits 是每个 IP 每小时 2,000 个请求)

【讨论】:

除了使用yql还有其他方法吗?我相信如果他们阻止您的 ip 或域,这对企业来说不是一件好事 - 它会突然下降! 理论上您可以编写自己的代理服务器并获得完全相同的结果.. 使用和实现也可能更简单.. 但没有它,您将始终必须依赖第 3 方代理服务器。 感谢您的回复...关于我们如何创建自己的代理服务器有什么建议吗?非常感谢!【参考方案2】:

默认情况下不允许跨域请求使用 XML。

但是,通过一点服务器端编程,您可以创建代理并在您自己的域中加载数据,并将其输出为 XML。

有关更多信息,请参阅Question

【讨论】:

顺便说一句,我认为 IE8 及更低版本不支持跨域 XHR 请求,所以是的,制作一个 php 脚本【参考方案3】:

如果您可以访问另一域,您也可以使用这种方法Cross Domain Request

【讨论】:

以上是关于跨域 AJAX 读取 XML的主要内容,如果未能解决你的问题,请参考以下文章

使用AngularJS返回xml的跨域ajax请求

使用 jQuery 从跨域 Ajax 请求接收 XML 响应

Ajax及跨域

Ajax:跨域请求被阻止:同源策略不允许读取远程资源

Ajax 跨域请求被阻止:同源策略不允许读取远程资源

JavaScript、JSONP 和跨域读取 XML