2017-07-25 2 views
1

Ich habe einen Ajax Aufruf an eine API, die korrekt zurückgegeben wird (200), wenn die URL und die Parameter in Ordnung sind. Jetzt versuche ich einen Fehler mit einer schlechten Anfrage zu erzwingen. Die Konsole wird mich über den Fehlercode 400 informieren, scheint aber nie in die Fehlermethode zu geraten. Stattdessen bleibt es in einer jQuery-Zeile stecken und kehrt nie zurück.jquery Ajax Antwort Fehler funktioniert nicht

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'); 
      } 
     }); 
    }, 

Also das Bild zeigt, wo es stecken bleibt. Ich kann nur vollständige und erfolgreiche Funktionen erfassen, aber wenn eine Antwort von 400 auftritt, passiert nichts. Versuchte alles, auch done(), fail(), da ich annahm, dass es ein Problem mit veraltetem Verhalten geben könnte. Aber dasselbe Problem dort. Kann mir bitte jemand helfen?

+0

Ist die URL gültig? Können Sie Ihre Browser-Konsole anzeigen? – ggderas

+0

Ihr Server sollte den Typ der Anfrage unterstützen, die gesendet wird. –

+0

Die URL ist gültig, wird aber absichtlich mit falschen Parametern aufgerufen, um einen 400-Statuscode zu erzeugen, der zurückgegeben wird, aber nicht von meinem Fehlercode behandelt wird. – kayoken

Antwort

0

Versuchen:

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'); 
      } 
     }); 
    }, 

dann zeigen Sie mir, was in der Konsole ist

+0

Thx. Ich habe Ihren Code ausprobiert, habe aber das gleiche Ergebnis wie zuvor erhalten. Der Hinweis von @karthick scheint ein Grund für dieses Verhalten zu sein. – kayoken

0

Fehler Rückruf wird nicht für domänenübergreifende Anfragen oder für JSONP Anfragen abgefeuert werden.

suchen Sie nach dem unten im Referenzlink.

Hinweis: Dieser Handler wird nicht für domänenübergreifende Skript- und domainübergreifende JSONP-Anforderungen aufgerufen.

Referenz: http://api.jquery.com/jquery.ajax/

Sie auf diese Antwort aussehen kann, wie Fehler zu handhaben für JSONP fordert

JSONP request error handling

+0

Danke für die Antwort. Dies scheint das Problem zu sein. – kayoken