2014-01-23 34 views
0

我試圖在書籤中使用jQuery JSONP AJAX請求,我發現請求在某些頁面上工作,但沒有在別人身上。下面是示例代碼:jQuery JSONP AJAX請求有時會失敗,「TypeError:無法調用方法'完成'未定義」

jQuery.ajax({ 
    url: "http://echo.jsontest.com/key/value/one/two", 
    type: "GET", 
    dataType: "jsonp", 
    cache: false 
}).done(function(data){ 
    console.log(data); 
}).fail(function(jqXHR, textStatus, errorThrown){ 
    console.log("errorThrown: " + errorThrown); 
}); 

如果你去下面的亞馬遜頁面:

http://www.amazon.com/dp/B00336EUTK?psc=1

而且在控制檯執行上面的代碼,你會發現,它的工作原理。但是,如果你去這個亞馬遜的頁面:

http://www.amazon.com/dp/B00E5UHSYW?psc=1

而且在控制檯執行上面的代碼,會出現以下錯誤:

TypeError: Cannot call method 'done' of undefined 

是什麼原因造成這個問題,怎麼會這樣固定?

編輯:我發現一個有趣的事情是,上了AJAX請求的網頁作品,回調參數似乎總是這個樣子:

callback=jQuery1640586556919850409_1390439428297 

在哪裏失敗的頁面,它似乎總是看起來像這樣:

callback=jsonp1390439502398 

我試過這在一堆不同的亞馬遜網頁上,它似乎是這種行爲是一致的。

也許這只是一個巧合,但我認爲這值得指出。

回答

2

不同版本的jQuery

的信不信由你,這兩個頁面使用不同版本的jQuery。 $()jQuery的

the first page運行V1.6.2

the second page運行V1.2.6

望着jQuery的文檔:

您可以鍵入到控制檯確定這個自己對於jQuery.ajax()here),它看起來像它沒有添加到jQuery直到v1.5

希望有所幫助。

+0

這從來沒有超過我的腦海!謝謝! – Nate

+2

Yah,像亞馬遜這樣的網站是粉筆充滿驚喜:)。樂意效勞! – chantastic

1

如果您運行console.log(jQuery.ajax);在控制檯中,您會看到您引用的第二個鏈接在jQuery.ajax類中沒有包含完成的函數(因爲它們是兩個不同的版本)。您可以進行版本檢查並根據jQuery是否具有該類方法來處理兩種不同的解決方案。這適用於您發佈的兩個鏈接:

//get the jQuery version 
var version = jQuery.fn.jquery, 
    parts = version.split('.'); 

//piece together a version integer 
version = parseInt(parts[0]+parts[1]+parts[2],10); 

if (version >= 150) { 
    //new method 
    jQuery.ajax({ 
     url: "http://echo.jsontest.com/keyu/value/one/two", 
     type: "GET", 
     dataType: "jsonp", 
     cache: false 
    }).done(function(data){ 
     console.log(data); 
    }).fail(function(jqXHR, textStatus, errorThrown){ 
     console.log("errorThrown: " + errorThrown); 
    }); 
} else { 
    jQuery.ajax({ 
     url: "http://echo.jsontest.com/keyu/value/one/two", 
     type: "GET", 
     dataType: "jsonp", 
     success: function(data){ 
      console.log(data); 
     }, 
     error: function(e){ 
      console.log(e); 
     } 
    }); 
} 
相關問題