2010-07-30 62 views
0

所以我正在閱讀Malsup的twitter plugin上的代碼,我注意到他編寫了自己的方法來處理jsonp,但是超時和錯誤。我只能假設內置的jQuery方法'getJSON'沒有這個功能,即使它顯然工作正常。使用jQuery的getJSON()方法

因此,我是否應該繼續在我製作JSONP請求的項目中使用Malsups版本,或者只是堅持使用jQuery的方法。我通過電子郵件發送了Malsup和保羅愛爾蘭人,詢問爲什麼有必要寫這篇文章,但我沒有聽到。不能怪他們真的:)

$.getJSONP = function(s){ 
    s.dataType = 'jsonp'; 
    $.ajax(s); 

    // figure out what the callback fn is 
    var $script = $(document.getElementsByTagName('head')[0].firstChild); 
    var url = $script.attr('src') || ''; 
    var cb = (url.match(/callback=(\w+)/) || [])[1]; 
    if (!cb) 
     return; // bail 
    var t = 0, cbFn = window[cb]; 

    $script[0].onerror = function(e){ 
     $script.remove(); 
     handleError(s, {}, "error", e); 
     clearTimeout(t); 
    }; 

    if (!s.timeout) 
     return; 

    window[cb] = function(json){ 
     clearTimeout(t); 
     cbFn(json); 
     cbFn = null; 
    }; 

    t = setTimeout(function(){ 
     $script.remove(); 
     handleError(s, {}, "timeout"); 
     if (cbFn) 
      window[cb] = function(){ 
      }; 
    }, s.timeout); 

    function handleError(s, o, msg, e){ 
     // support jquery versions before and after 1.4.3 
     ($.ajax.handleError || $.handleError)(s, o, msg, e); 
    } 
}; 

回答

0

從jQuery文檔爲getJSON(...)

重要:對於jQuery 1.4,如果 JSON文件包含語法錯誤時, 請求通常會失敗默默。 由於這個原因,避免頻繁手動編輯JSON 數據。 JSON是 數據交換格式,其語法規則 比JavaScript的對象字面表示法更嚴格。 例如,所有以JSON表示 的字符串,無論它們是屬性 還是值,都必須包含在 雙引號中。有關JSON 格式的詳細信息,請參見http://json.org/

推測沉默失敗並不是他們喜歡的東西,因此插件。在你的情況下,如果你正在發出JSONP請求並發現自己使用onErroronTimeout方法,那麼保留該插件。我不必在任何實際的容量中使用JSONP,但我會認爲錯誤處理總是很好。在關於jQuery文檔的鏈接中,有很多關於這個問題的討論。

+0

謝謝你,這是有道理的。 – screenm0nkey 2010-08-02 13:56:51

1

如果是JSONP,你可以使用

$.getJSON(url + "&callback=?", [args]); 

獲得JSONP和調用一個函數,當它加載。 &callback=?查詢讓jQuery在全局範圍內生成一個隨機回調函數來響應JSONP調用。

+0

感謝您的回覆。我可能沒有正確地說出我的問題,但我想知道爲什麼Malsup需要編寫自己的函數來檢索JSON對象。內置$的問題是什麼?Malsup不喜歡的getJSON方法。 – screenm0nkey 2010-08-02 13:44:56

0

JQuery HowTo有一個關於using jQuery, JSONP, and Twitter的帖子。

Twitter的JSON(P)API網址:

http://twitter.com/status/user_timeline/USERNAME.json?count=10&callback=JSONPcallbackFunction

這裏是jQuery的 $ .getJSON()函數的使用代碼:

http://twitter.com/status/user_timeline/USERNAME.json?count=10&callback=

我們把? (問號)爲 回調函數名稱,所以jQuery可以用 替換爲它創建的動態函數名稱。

+0

這不是我問的問題,而是謝謝你的答覆。 – screenm0nkey 2010-08-02 13:52:42