2010-03-23 42 views
3

檢索數據我有jQuery的非常簡單的位取回我的最新的tweetjQuery的不能從本地主機

$.getJSON("http://twitter.com/statuses/user_timeline/username.json?count=1", 
      function(data) { 
       $("#tweet_text").html(data[0].text); 
      }); 

能正常工作在我的桌面上的一個簡單的HTML文件。但是,一旦從我的本地主機(Apache)訪問文件沒有數據正在返回。我想知道Apache的任何部分是否以某種方式阻止了該請求?還是其他想法?

+1

您的瀏覽器執行的是JS,而不是Apache,所以Apache不應該責怪。你真的需要比「不會工作」更具體。什麼標題從Twitter返回?狀態碼? – 2010-03-23 23:50:14

回答

7

由於Same-origin Policy,JavaScript目前無法直接請求跨域。

你最好打賭可能是爲此調查JSONP

您可以從兩個jQuery找到關於它的更多信息:

如果URL中包含字符串「回調=?」在URL中,請求被視爲JSONP。有關更多詳細信息,請參閱$.ajax()中有關jsonp數據類型的討論。

Twitter

參數:

  • 回調:可選。 僅適用於JSON格式。如果提供,響應將使用帶給定名稱的回調的JSONP格式。

    • 例子:http://search.twitter.com/search.json?callback=foo&q=twitter

希望這有助於。


修正...

如果status/user_timeline支持JSONP,它不記錄這樣。

您可能需要考慮設置一個Cross-Domain Proxy以獲取所需的數據。

0

這是一個shorthand Ajax功能,這相當於:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: success 
}); 

的Ajax(非JSONP)是不允許越過域。

+0

Ajax非常容許跨域。 – Joel 2010-03-23 23:58:05

+0

你有它倒退! XMLHttpRequest只有在使用訪問控制並且不是所有瀏覽器都支持的情況下才允許使用跨域,並且少數服務器可能啓用它。您可以絕對加載並執行其他域所服務的腳本。例如,這就是谷歌分析的工作原理。我寫了數百個腳本,它們直接從http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js加載jQuery,並使用http://code.google。 com/apis/ajax/documentation /#GoogleLoad – nicerobot 2010-03-24 00:02:14

+0

實際上,每個瀏覽器都將允許您使用JS從任何外部域獲取數據。 XSS是指試圖與腳本或另一個域上的DOM(窗口到窗口,幀到幀等)交互的腳本。簡單地調用另一個域的數據不應該調用XSS過濾器。工作示例:http://jsbin.com/okoko/3/edit(其中jsbin.com從stackoverflow.com加載json資源) – Joel 2010-03-24 00:19:47

0

嘗試將callback=?附加到URL。像這樣

"http://twitter.com/statuses/user_timeline/username.json?count=1&callback=?" 
0

也許它需要較長時間的HTML有點localhost上加載由於某種原因,你有沒有包裹在一個DOM腳本準備。因此撥打電話,此時沒有#tweet_text被填充