2013-10-14 105 views
0

我已經在這裏看到了類似問題的幾個答案,並且給了他們所有的好讀!我現在面臨的問題是,我不能讓交通局租用自行車飼料用JSONP工作,而這只是返回404,而如果你把在瀏覽器中的鏈接,它是存在的:用JSONP讀取XML

$(document).ready(function(){ 

    // CYCLE HIRE DATA 

    var cycleHireUrl = 'http://www.tfl.gov.uk/tfl/syndication/feeds/cycle-hire/livecyclehireupdates.xml'; 

    $.ajax({ 
     type: "GET", 
     dataType: "jsonp", 
     url: cycleHireUrl, 
     success: function(data) { 
      $.each(data["station"], function(index, item) { 
       var name = item.name; 
       $('.cycles').append('<div>' + name + '</div>') 
      }); 
     } 
    }); 

}); 

我似乎得到的在控制檯添加到我的網址多餘的東西串,這可能導致錯誤:

GET http://www.tfl.gov.uk/tfl/syndication/feeds/cycle-hire/livecyclehireupdates.xml?callback=jQuery110209581123229581863_1381759036915&_=1381759036916 404 (Not Found) 

有沒有人有這個問題?

+3

您的服務不支持JSONP。 – SLaks

+0

jQuery將這些參數附加到url以便於JSONP回調函數。 但是,對於您的情況,該服務會返回不是JSONP的XML。您正在使用的服務是否支持JSONP? –

+0

提示:由於跨域策略,您將無法通過js獲取該xml(這就是爲什麼我認爲您正在嘗試jsonp)...而是使用服務器端腳本作爲代理(如果您願意的話)。 ..)來加載xml,並在你的js中,打你的服務器端腳本。噹噹! – zamnuts

回答

0

JSONP代表JavaScript Object Notation with Padding。這意味着一個包裝在函數調用中的標準JSON字符串。該函數被執行,但是如果頁面上有該名稱的JavaScript函數(或者由jQuery動態添加)。如果您的HTML中沒有使用相同名稱的函數,則調用將失敗,並且如果該JSONP塊內的字符串不是JSON,則會失敗。這種情況下,404告訴你服務不願意返回任何格式的內容。

0

從我所看到的情況來看,TFL提要通常用於從您自己的服務器使用,而不是從客戶端的Javascript中使用。你必須註冊特定的IP地址才能使用它,這有點暗示。循環提要看起來好像只是XML,而不是JSON或JSONP,可能是出於這個原因。

如果您想要提供循環可用性結果,我認爲您唯一的選擇是JSONP將設置查詢TFL的服務器,讀取XML響應,將所需的內容轉換爲JSONP並將其返回給客戶端。