【问题标题】:$.ajax JSONP on crossdomain XML file跨域 XML 文件上的 $.ajax JSONP
【发布时间】:2012-08-05 20:58:26
【问题描述】:

我正在尝试从跨域源读取 XML,但无法将回调响应转换为字符串。如果我在 chrome 中查看控制台,我会得到“资源解释为脚本,但使用 MIME 类型文本/xml 传输:http://mysite.com:2000/g7?callback=jQuery17209426668137311935_1344441190139&_=1344441194148

然后是'Uncaught SyntaxError: Unexpected token

我在这里错过了什么?

$.ajax({ 类型:'GET', 网址:'http://mysite.com:2000/g7', 数据类型:'jsonp', mimeType: '文本/xml' });

【问题讨论】:

  • 它试图将 XML 解释为 Javascript。一个简单的解决方法是发回封装在 JSON 对象中的 XML。或者,如果您真的很聪明,您会将 XML 转换为 JSON,因此最好从一开始就开始。您需要访问任何解决方案的数据源。

标签: ajax jquery


【解决方案1】:

我在这里错过了什么?

JSONP 推断 JSON 响应包装在回调中的事实。这不适用于 XML。因此,您必须修改远程服务器端脚本,使其返回 JSONP,而不是 XML。例如,响应可能如下所示:

callback({ xml: '<node>foo bar</node>' });

但是如果远程服务器直接发送 XML,由于同源策略限制,你不能使用 AJAX 来调用它。

【讨论】:

  • 好吧,我认为我在某处读到了可以使用 .ajax 命令通过回调从 url 获取 XML。我知道我对 XML 使用 JSONP 命令,但也许我误解了我看过的另一篇文章。生病尝试再次找到它。所以我想我真正的问题是,返回 XML 的服务器,我无法控制,所以我无法让它返回 JSON 字符串。有什么方法可以远程解析 XML 页面?
  • 是的,您可能误解了这篇文章。由于浏览器内置的相同来源策略限制,您无法发送跨域 AJAX 请求。一种可能的解决方法是使用 JSONP,但远程服务器必须支持它。如果没有,您可以在您的域上编写一个服务器端脚本,作为您的域和远程域之间的桥梁。然后将 AJAX 请求发送到您自己的服务器端脚本,该脚本将查询远程域并返回 XML。
  • 好的,这就是我认为我必须要做的。我正在查看一些使用 'file_get_contents($xmlUrl)' 的 PHP 脚本示例,但我必须对此进行更多研究。我在实际从“file_get_contents”返回数据时遇到问题,相反我看到人们使用“cURL”这听起来正确吗?
  • 是的,这听起来完全正确。向远程域发送请求以检索 XML 并将此 XML 写入响应的 PHP 脚本。然后将 AJAX 请求发送到您自己的 PHP 脚本。这次不需要指定任何 jsonp 数据类型。
猜你喜欢
  • 1970-01-01
  • 2013-04-04
  • 2014-08-14
  • 2013-10-29
  • 1970-01-01
  • 2013-02-03
  • 2014-12-20
  • 2014-12-30
  • 2013-12-29
相关资源
最近更新 更多