簡體   English   中英

跨域 JSONP XML 響應

[英]Cross Domain JSONP XML Response

我正在使用 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,但同時它會生成一個錯誤,指出“意外的令牌 <”,不幸的是它停止了我的處理並且我沒有收到警報消息。 任何的想法?

最好的事物

正如上面的評論中提到的,來自 javascript 的跨域 xml 是一個禁忌,除非您可以控制吐出 XML 的應用程序,並且可以使用格式化技巧來“欺騙”腳本將其解析為 JSON。 但是,如果您可以這樣做,那么問題將是為什么不首先將格式設置為 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 語句以帶回您想要的。

希望有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM