2016-06-02 5 views
0

Informationsfrage eher als ein Problem, das ich gelöst habe. Konnte sonst keine befriedigende Antwort findenJQuery AJAX-Aufruf erhält ungültiges JSON, aber keine Fehlerhandler heißen

Ich bin neu in JQuery/JS, und ich versuche, Fehlerhandler zu testen, die ich für einen AJAX-Aufruf an ein Rails-Backend habe. Ich hatte verdammt viel Zeit, die Handler zum Feuern zu bringen.

  1. Ich versuchte, das Backend eine 500 und eine Stack-Trace zurückgeben, aber die Handler feuern nicht. Die Konsole zeigt VM26658:1 Uncaught SyntaxError: Unexpected token S in JSON at position 0.
  2. Ich habe versucht, eine leere Antwort mit einem schlechten Anforderungsstatus zurückkehrt, aber denselben Fehler und Verhalten
  3. Ich habe endlich die Handler durch Rücksendung eine leere (aber gut gebildet) JSON Antwort und einen 400 Status
abzufeuern

So scheint es, dass die Ajax-Fehlerhandler nicht ausgelöst werden, wenn der Antworttext nicht analysiert werden kann. Ist das korrekt? Wenn dem so ist, scheint das eine ziemlich substantielle und nicht intuitive Begrenzung der Handlerlogik zu sein. Wenn nicht, wie war ich dann dumm?

Danke!

Aktualisierung mit Code

In haml:

= simple_form_for @object, method: :put, url: setup_object_path, remote: true |f| 
= f.input :some_input 
= f.submit, class: 'js-submit' 

In Coffee:

$(document).on 'ajaxStart', startFunction 
$(document).on 'ajaxError', errorFunction 
$(document).on 'ajaxComplete', completeFunction 

Ergebnis: startFunction Feuer für alle drei Fälle, aber errorFunction und completeFunction nur Feuer für Fall # 3

Ich habe auch versucht, direkt an js-submit mit ajax:error zu binden, aber hatte das gleiche Ergebnis

+1

Parse-Fehler wird AJAX-Fehler-Handler auslösen, wenn 'dataType' eingestellt ist und/oder richtiger Content Type-Header auf dem Server festgelegt ist. Bitte zeigen Sie den entsprechenden Code an. Dies wird auch davon ausgegangen, Anfrage ist nicht 'JSonp' – charlietfl

+0

mit Beispiel-Code aktualisiert, danke für die Hilfe – toppy42

+0

Angst, die Haml-Referenzen bedeuten mir nichts. Anfragen werden alle im Browser gemacht, der nur weiß, was dort existiert – charlietfl

Antwort

0

Das Problem gefunden. Jemand in meiner Codebasis hatte eine Bindung auf Dokumentebene an ajax:error, die $.parseJSON verwendet. Alles, was nicht gültig war JSON explodierte und stoppte alle anderen Fehlerbehandlung.

Sorry für die Verwirrung und Dank für die Hilfe