小编典典

跨域JSONP XML响应

ajax

我正在使用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,但随之产生一个错误,提示“意外令牌<”,不幸的是停止了我的处理,但我没有收到警告消息。任何想法?

最好


阅读 322

收藏
2020-07-26

共1个答案

小编典典

正如上面的评论中提到的那样,除非您能够控制吐出XML的应用程序并可以使用格式化技巧来“欺骗”脚本以将其解析为JSON,否则javascript的跨域xml是不行的。如果您可以这样做,那么问题就必须是为什么不首先将格式设置为JSON?所以…选项

  1. 格式化应用程序的输出以使用JSONP进行处理。假设您无法在这种情况下这样做…
  2. 在您的网络服务器上使用本地代理。PHP,python或任何其他没有跨域限制的语言都提供了许多简单的代理示例。至于页面上的脚本,则是本地AJAX请求。如果你做不到,那…
  3. 一种可能性是使用像yql这样的中介。yql和jquery可以解决许多这些xml问题。当然,不利的一面是您通过无法控制的第三方发送邮件。

像这样:

// find some demo xml - DuckDuckGo is great for this
    var xmlSource = "http://api.duckduckgo.com/?q=StackOverflow&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语句以带回您想要的内容。

希望能有所帮助

2020-07-26