2011-03-14 94 views
5

我正在製作一個html頁面,旨在在PC上本地運行,最好沒有本地服務器運行(file://)。我也使用jQuery使操縱/ AJAX更容易一些。從本地主機或文件訪問JSON服務://

我想從twitter API加載2個結果,但我得到一個錯誤。代碼如下:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething1); 
    }); 
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething2); 
    }); 

我也嘗試了下面的代碼,但它沒有改變結果。

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json", 
    { 
     count:   "9", 
     screen_name: "someuser" 
    }, 
    function(data) { 
     $.each(data.items, updateAWTweets); 
    }); 
$.getJSON("http://search.twitter.com/search.json", 
    { 
     q:    "somequery", 
     result_type: "recent", 
     count:   "9" 
    }, 
    function(data) { 
     $.each(data.items, updateHashTagTweets); 
    }); 

我得到了鍍鉻以下錯誤(本地主機服務器上):

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin. 

或(與文件://鏈接)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin. 

有誰知道我可以修復這個?

+0

該錯誤是一個跨站點腳本警告。 – 2011-03-14 14:10:26

+0

可能重複[jQuery.getJSON不適用於twitter](http://stackoverflow.com/questions/5183831/jquery-getjson-not-working-for-twitter) – epascarello 2011-03-14 14:31:08

回答

11

您正遇到same-origin policy限制 - 您的腳本無法訪問除加載它之外的任何其他域。

  1. 你可以給JSONP一試 - 這是一個共同的解決方案,跨域獲取數據:

    你的代碼看起來像這樣(注在URL中添加callback=?):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
          {}, 
          function (data) { 
            $.each(data.items, doSomething2); 
        }); 
    
  2. 另一種選擇是設置代理 - 您可以使用Apache httpd作爲代理/反向代理來解決此限制。

+0

似乎很合理,但現在我得到了一個不同的錯誤:「 Uncaught TypeError:無法讀取未定義的屬性「長度」 – dtech 2011-03-14 20:07:05

+0

似乎你想要訪問你認爲是數組的'length'屬性,但實際上是'undefined'。確保你的數據確實存在('if(!assumeArray){//處理丟失的數據} else {//通常處理}'當搜索查詢沒有結果時,Twitter會返回什麼?另外,請看一下http://stackoverflow.com/questions/3040069/uncaught-typeerror-cannot-read-property-length-of-undefined-jquery關於如何調試這個(和其他)異常的一些建議。 – 2011-03-14 20:37:56

+1

這裏的一個[準系統小提琴](http://jsfiddle.net/nogoodatcoding/reJN6/4/),其獲取鳴叫爲特定的用戶,並且還顯示一搜索的結果。這有什麼幫助? – 2011-03-14 20:47:08

-2

不要使用此$.getJSON() 其不靈活.. 您可以使用

$.ajax({ 
    url:"test.json", 
    dataTypr:"json", 
    async:false 
}).responseText; 

這可以通過HTML輕鬆訪問編碼....