跨域 JSONP XML 响应
Posted
技术标签:
【中文标题】跨域 JSONP XML 响应【英文标题】:Cross Domain JSONP XML Response 【发布时间】:2014-08-14 04:40:08 【问题描述】:我正在使用 JSONP 进行 api 跨域请求,外部服务器以 XML 格式返回结果,下面是我的代码:
$.ajax(
type: "Get",
url: "http://domain.com/function?Data=1234567890",
xhrFields: withCredentials: true,
dataType: "JSONP text xml",
contentType: "application/xml",
cache: false,
success: function(xml)
alert($(this).find('ResponseStatus').text());
);
它返回给我一个 xml,但同时它会生成一个错误,说“意外的令牌
最好的
【问题讨论】:
我真的希望这不是您的代码,并且复制和粘贴出现了严重错误...... 感谢佩里的指正...!!!! 在我们查看您的代码之前,您必须解决更大的问题。作为一般规则,您不能使用 jsonp 解析 xml。这比我在***.com/questions/10068963/… 的解释要好得多(请考虑给把它放在一起的作者+1)。尽管您会看到有潜在的解决方法,但是正如@jmort253 指出的那样,如果您对服务器的输出有足够的控制权,最好将其格式化为 JSON 以开始 如果我在你的位置并且我无法对输出格式做任何事情,我可能会考虑在我的网络上粘贴几行 php 或 Python(或你选择的武器)服务器充当代理。 【参考方案1】:如上面的 cmets 中所述,来自 javascript 的跨域 xml 是一个禁忌,除非您可以控制吐出 XML 的应用程序并且可以使用格式化技巧来“欺骗”脚本将其解析为 JSON . 如果你能做到这一点,那么问题就是为什么不首先格式化为 JSON? 所以...选项
-
格式化应用程序的输出以便使用 JSONP 进行处理。假设你不能在你的情况下这样做......
在您的网络服务器上使用本地代理。在 PHP、python 或任何其他没有跨域限制的语言中有很多简单的代理示例。就页面上的脚本而言,它是本地 AJAX 请求。如果你不能这样做,那么......
一种可能性是使用像 yql 这样的中介。 yql 和 jquery 可以解决很多这些 xml 问题。当然,缺点是您是通过您无法控制的第三方发送内容。
类似这样的:
// find some demo xml - DuckDuckGo is great for this
var xmlSource = "http://api.duckduckgo.com/?q=***&format=xml"
// build the yql query. Could be just a string - I think join makes easier reading
var yqlURL = [
"http://query.yahooapis.com/v1/public/yql",
"?q=" + encodeURIComponent("select * from xml where url='" + xmlSource + "'"),
"&format=xml&callback=?"
].join("");
// Now do the AJAX heavy lifting
$.getJSON(yqlURL, function(data)
xmlContent = $(data.results[0]);
var Abstract = $(xmlContent).find("Abstract").text();
console.log(Abstract);
);
当然,在该示例中,您将带回所有 xml 数据并在本地搜索它 - 可以选择调整 select 语句以带回您想要的内容。
希望有帮助
【讨论】:
非常感谢佩里..你的第二个选项给了我黑客...我在我的一个页面上使用了本地 AJAX 请求,然后 PHP 和 CURL 救了我.... 鸭鸭go的api变了吗?该示例记录空字符串。不过使用 yql 似乎可行。以上是关于跨域 JSONP XML 响应的主要内容,如果未能解决你的问题,请参考以下文章