jQuery ajax:Fehler läuft, auch wenn die Antwort 200 OK
Ich habe ein Formular, das senden eines Formulars per AJAX mit :remote => true. Blick auf den server-log und FireBug erhalte ich die Antwort 200 OK und es gibt JSON, in form von:
{ "email": "[email protected]"}
dann habe ich diese beiden Handler:
$('#new_invitation').bind("ajax:success", function(event, data, status, xhr) {
alert('test');
});
$('#new_invitation').bind("ajax:error", function() {
alert('error');
});
und auch wenn ich wieder eine 200OK, es ist der Fehler-handler, der feuert. Die einzige Zeit, die ich es geschafft, die Erfolgs-handler Arbeit war, als ich senden Sie eine leere Antwort mit 200 in die header.
Ich kann nicht herausfinden, warum dies nicht funktioniert :-S
BEARBEITEN 1------------
Nachdem Sie diese änderungen:
$('#new_invitation').bind("ajaxSuccess", function(event, data, status, xhr) {
alert('test');
});
$('#new_invitation').bind("ajaxError", function(jqXHR, textStatus, errorThrown) {
alert('error');
console.log(jqXHR.responseText);
console.log(textStatus.responseText);
console.log(errorThrown.responseText);
});
Ich bin noch immer der gleiche Fehler. Die log-Zeug gibt mir:
undefined
my_email@test.com
undefined
Hier ist der code für das Formular (standard-Schienen Zeug):
<%= form_for @shoot.invitations.new, :url=>shoot_invitations_path(@shoot), :remote => true, :html => {:class => 'form-inline'} do |f| %>
<%= f.text_field :email, :'placeholder' => 'ex: [email protected]' %>
<%= f.text_field :role, :'placeholder' => 'ex: Photographer' %>
<%= f.submit "Invite", :class => 'btn btn-success' %>
<% end %>
BEARBEITEN 2 ---------
Hab ich einige verpasst und jetzt scheint es mein Fehler ist ein parse error. Ich verstehe nicht, denn das ist der JSON-bin ich immer wieder vom server (Daten.responseText), das scheint alles gut:
{"email":"[email protected]"}
ANTWORT ---------
Ich habe dann alles funktionieren, wenn ich :'data-type' => :json in form von Optionen. Ich versuchte dies vor und es hat nicht funktioniert, weil ich es in der form_tag-Optionen und nicht die html-Optionen...
- Zeigen Sie uns Ihre ajax-request.
- console.melden Sie sich für alle drei Argumente, mehr als wahrscheinlich, werden Sie immer parseerror-was bedeuten würde, ungültiges json.
- Kevin=> ich bin nicht einmal reagiert mit JSON. Ich habe auf den ersten, aber nicht ich bin nur stur einen text-string und es immer noch nicht.
- was bedeutet der ajax Aufruf Aussehen? Zeigen Sie bitte, dass Sie code.
- Ich habe nicht einen code schreiben, es ist der Standard-jQuery-UJS-Sachen, die automatisch Hinzugefügt wird, wenn Sie verwenden,: remote => true, in der form... es sei denn, Sie sind über etwas anderes reden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der server wieder etwas, das nicht gültig JSON, wie ein einzelnes Leerzeichen, jQuery erzeugt einen parse error und finde es ist ein Fehler bei der Anforderung, auch wenn der status-code 200.
Ab jQuery 1.9 eine komplett leere Antwort als einen ausgefallenen Wunsch, wenn der Typ als JSON da eine leere Zeichenfolge ist ungültig JSON. Sehen http://jquery.com/upgrade-guide/1.9/#jquery-ajax-returning-a-json-result-of-an-empty-string.
Überprüfen Sie, dass $.ajax datatype festgelegt ist jsonp
Versuchen, um return {E-Mail:"[email protected]"}
JSON.parse(") wirft einen Fehler. Für mich ist das dumm, sollte es wieder nicht definiert.
Hinzugefügt habe ich diesen code meine app
oder für die u-Arme Menschen nicht mit coffeescript ( ungetestet )
Verwenden
ajaxSuccess
stattajax:success
, undajaxError
stattajax:error
für Ihre eventTypes.Siehe hier: http://docs.jquery.com/Ajax_Events
(Auf Schienen 5.2 und jQuery 2) ich verbrachte eine Stunde den Vergleich zweier bits von UJS-code-side-by-side-ohne Erfolg: beide geben ein ähnliches format Javascript-Funktion aufrufen (zum aktualisieren der front-end) und ein status 200, aber man löst
ajax:error
und der andere nicht. Ich war in der Lage das problem zu beseitigen durch die Umstellung von jquery_ujs zu Schienen-ujs in der application.js manifest:Hinweis: der Bindestrich vs. Unterstrich!
Nun beide Aufrufe Verhalten sich auf die gleiche (richtige) Weg. Ich hoffe, dies hilft jemand anderes.