2017-07-25 141 views
1

我有一個Ajax調用API,當URL和參數很好時,它將正確返回(200)。現在我試圖強迫一個錯誤的請求。控制檯會通知我有關錯誤代碼400,但似乎從未進入錯誤方法。相反,它陷入了一些jquery行,永遠不會返回。jquery ajax響應錯誤不起作用

fetch: function(successCallback, errorCallback) { 
     var apiUrl = this.applyFilter(filters); 
     var self = this; 

     this.log('fetch', apiUrl, currentSearchMode); 

     $.ajax({ 
      url: apiUrl, 
      type: 'GET', 
      cache: (debug) ? true: false, 
      processData: true, 
      crossDomain: true, 
      scriptCharset: 'UTF-8', 
      jsonp: 'callback', 
      dataType: 'jsonp', 
      success: function(data, statusText, jqXHR) { 
       console.log(jqXHR); 
       // if(jqXHR.status == 400){ 
       //  console.log('there is an error'); 
       // } 
       self.log('fetch::success', data); 
       if (typeof data.error !== 'undefined') { 
        showNoResultError = true; 
        var appData = lastValidResult[currentSearchMode]; 
       } else { 
        showNoResultError = false; 
        var appData = self.normalize[currentSearchMode](self, data); 
        lastValidResult[currentSearchMode] = appData; 
       } 
       if (typeof successCallback === 'function') 
        successCallback(appData); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       //do sth here 

       // if(jqXHR.status&&jqXHR.status==400){ 
       //  alert(jqXHR.responseText); 
       // }else{ 
       //  alert("Something went wrong"); 
       // } 
       // console.log('works now'); 
       // self.log('fetch::error', textStatus, errorThrown); 
       // if (typeof errorCallback === 'function') 
       //  errorCallback.apply(this, arguments); 
      }, 
      complete: function(jqXHR, textStatus) { 
       console.log(jqXHR); 
       console.log('complete'); 
      } 
     }); 
    }, 

因此,圖像顯示卡住的位置。我只能捕獲完整的和成功的功能,但是當出現400響應時,什麼都沒有發生。嘗試過任何事情,也完成(),失敗(),因爲我認爲可能存在問題與不贊成的行爲。但同樣的問題。有人可以幫忙嗎?

+0

是網址是否有效?你能顯示你的瀏覽器控制檯嗎? – ggderas

+0

您的服務器應該支持正在發送的請求的類型。 –

+0

該URL有效,但有意使用錯誤的參數調用以激發400狀態碼,該狀態碼已返回但不會由我的錯誤代碼處理。 – kayoken

回答

0

嘗試:

fetch: function(successCallback, errorCallback) { 
     var apiUrl = this.applyFilter(filters); 
     var self = this; 

     this.log('fetch', apiUrl, currentSearchMode); 

     $.ajax({ 
      url: apiUrl, 
      type: 'GET', 
      cache: (debug) ? true: false, 
      processData: true, 
      crossDomain: true, 
      scriptCharset: 'UTF-8', 
      jsonp: 'callback', 
      dataType: 'jsonp', 
      success: function(data, statusText, jqXHR) { 
       console.log(jqXHR); 
       // if(jqXHR.status == 400){ 
       //  console.log('there is an error'); 
       // } 
       self.log('fetch::success', data); 
       if (typeof data.error !== 'undefined') { 
        showNoResultError = true; 
        var appData = lastValidResult[currentSearchMode]; 
       } else { 
        showNoResultError = false; 
        var appData = self.normalize[currentSearchMode](self, data); 
        lastValidResult[currentSearchMode] = appData; 
       } 
       if (typeof successCallback === 'function') 
        successCallback(appData); 
      }, 
      error: function(data){ 
       console.log(data); 
       console.log(data.responseText); 
      }, 
      complete: function(jqXHR, textStatus) { 
       console.log(jqXHR); 
       console.log('complete'); 
      } 
     }); 
    }, 

然後,告訴我什麼是在控制檯

+0

Thx。我試過你的代碼,但得到了和以前一樣的結果。來自@karthick的提示似乎是這種行爲的原因。 – kayoken

0

錯誤回調不會爲跨域請求或JSONP請求被解僱。

在參考鏈接中搜索以下內容。

注意:此處理程序未針對跨域腳本和跨域JSONP請求進行調用。

參考:http://api.jquery.com/jquery.ajax/

你可以看一下這個答案如何處理錯誤的JSONP請求

JSONP request error handling

+0

感謝您的回答。這似乎是問題所在。 – kayoken