跨域 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 响应的主要内容,如果未能解决你的问题,请参考以下文章

跨域 AJAX 读取 XML

JSONP跨域ajax请求

跨域总结-JSONP和XHR2

JSONP跨域请求

跨域的问题(jsonp和cors)

跨域总结-JSONP和XHR2