2012-02-21 66 views
2

我正在嘗試用jQuery 1.6.4和移動版來獲取簡單的json feed並將其顯示爲學習練習。我無法讓getJSON中的回調觸發。 json feed是公開的,所以沒關係。這可能是一個jQuery 1.6.4 +移動的問題?jquery:Ajax Json簡單渲染

$.getJSON('https://raw.github.com/currencybot/open-exchange-rates/master/latest.json', 
     function (data) { 
     var items = []; 

     $.each(data, function (key, val) { 
      items.push('<li id="' + key + '">' + val + '</li>'); 
     }); 

     $('<ul/>', { 
      'class': 'my-new-list', 
      html: items.join('') 
     }).appendTo('body'); 
    }); 

回答

3

您不能對此URL執行AJAX請求,因爲它違反了相同的源策略。有關說明,請參閱http://e-mats.org/2010/01/jquery-getjson-and-the-same-origin-policy/。這裏有一個報價:

當創建一個簡單的混搭與數據從外部來源,你 平時想讀在合適的格式的數據 - 如JSON。該工作的 工具往往是JavaScript,運行在您最喜歡的 瀏覽器中。唯一的問題是,使用XHR (XMLHttpRequest)進行的請求必須遵循相同的源策略,這意味着無法爲生活在另一個主機上的資源請求 ,而不是爲原始請求提供服務的主機。

爲了避開這個客戶端,通常使用JSONP--或者對通常的JSON輸出進行簡單的修改,即 。數據仍然是JSON,但 輸出還包括在請求結束時的簡單回調, 在本地瀏覽器中觸發一個JavaScript。這樣,數據的創建者實際上告訴瀏覽器(以這麼多黑客的方式),它是 好吧,我已經想到了這一點。幫助你自己。

基本上,普通的AJAX使用XMLHtmlRequest,它具有相同的域安全策略。另一方面,JSONP插入一個腳本標記(沒有同域源策略),它運行一個回調函數。但是終端服務器必須支持這個功能,因爲它負責使用回調函數實際生成腳本。

如果服務器支持JSONP,則可以通過將callback=?添加到您使用getJSON調用的URL中的請求參數來執行此操作。但它看起來不像這個端點支持JSONP(增加callback=?什麼都不做)。

因此,您可能必須在服務器上創建代理端點才能訪問此數據。基本上,在你自己的服務器上創建一個端點,使用任何有意義的方法(curl等)加載該數據,並按原樣返回它。然後,您可以使用常規AJAX調用您自己的服務器端點(同一服務器=不違反相同的原始策略)。