2015-09-23 64 views
0

不能提醒$的getJSON .fail:

this.flickrPics = ko.observableArray(); 
ko.computed(function() { 

    $.getJSON(
     'https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?', 
     { 
      tags : data.name, 
      format : 'json' 
     }) 
    .done(function(response) { 
      for (var i = 0; i < 10; i++) { 
       self.flickrPics.push(response.items[i].media.m); 
      } 
    }) 
    .fail(function(error) { 
     alert(error + 'error'); 
     // $('.pics-box h2').text("sorry, pictures cant be loaded at the moment"); 
    }); 

}, this); 

一切正常,除了.fail完美。如果我搞砸了網址,什麼都沒有發生,只會得到失敗的Ajax調用的控制檯錯誤。我究竟做錯了什麼?

+0

JSONP請求不總是觸發由於如何JSONP請求是使用腳本代碼發出的錯誤。唯一的解決方法是使用jQuery 2.x或自己發送/處理jsonp請求。 –

回答

1

爲了保持與舊瀏覽器的兼容性,jQuery 1.11.x使用.onreadystatechange來跟蹤jsonp請求何時返回。因此,發送腳本或jsonp請求時,不可能跟蹤超時錯誤以外的錯誤。

爲了解決這個問題,您應該在現代瀏覽器中使用jQuery 2.x,並且在舊瀏覽器中只包含1.11.x,這樣大多數用戶將得到更好的錯誤處理。修復其他用戶的唯一方法是不使用jQuery發送此請求,而是自己創建腳本標記,並找到一種跟蹤所有支持的瀏覽器中可用的成功/錯誤的方法。或者你可以用你的服務器代理這個請求,並執行一個正常的XMLHTTP請求。

https://github.com/jquery/jquery/blob/1.11.3/src/ajax/script.js#L57

https://github.com/jquery/jquery/blob/2.1.3/src/ajax/script.js#L44

+0

相關:http://stackoverflow.com/questions/32640229/catching-403-from-ajax-promise-in-jquery-v1-x/32655237#32655237 –

+0

感謝信息傢伙 – givehug