AJAX-success-Funktion nicht aufgerufen
Ich versuche dem Erfolg Funktion aus einem AJAX-Aufruf ausgelöst. Ich weiß, es ist richtig zu arbeiten, denn ich bin schlug meinen eigenen API und ich kann sehen, dass es richtig ist, schlagen Sie die URL und der server ist die Ausgabe einen HTTP-200.
Ich dachte, es war, weil der server ausgeben, json, also habe ich versucht zu berücksichtigen, dass in der AJAX-Aufruf, aber noch immer ist der Erfolg nicht funktionieren. Hier ist mein code
ajax
$.ajax('http://localhost:3000/api/users/show/:id', {
type: 'GET',
dataType: 'json',
contentType: "application/json",
data: {
id: 1
},
success: function(response) {
return alert("Hey");
}
});
api-Methode
class UsersController < ApplicationController
respond_to :json
def show
respond_with User.find(params[:id])
end
end
server-logs
Started GET "/api/users/show/:id?id=1" for 127.0.0.1 at 2013-08-02 20:36:42 -0700
Processing by MainController#index as JSON
Parameters: {"id"=>"1", "path"=>"api/users/show/:id", "main"=>{}}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Rendered main/index.html.erb within layouts/application (0.6ms)
Completed 200 OK in 146ms (Views: 144.3ms | ActiveRecord: 0.5ms)
[2013-08-02 20:36:42] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
- möglich, Duplikat der Was bedeutet "WARNEN Könnten nicht bestimmen," content-length der Antwort der Körper." bedeutet und wie loswerden ich es?
- Ich denke, dass hat zu tun mit einem AJAX-Aufruf. Die Antwort sagt, dass die Warnung getrost ignorieren.
- Wissen Sie, was
dataType
wirklich bedeutet? Haben Sie versucht, indem eineerror
Rückruf? - Zu BEKOMMEN ist, sollte nicht der Content-Type
- Ich war auf der Suche auf Datentyp und ich dachte, das ist was ich wollte. Ich erwarte wieder ein JSON-Objekt der
User
Modell. Ich sah auch, dass so eine Lösung nach der Suche online. Aber es sollte nichts passieren bei mir funktioniert. - Ist die Seite, lässt die Anfragen von derselben Domäne aus bereitgestellt (und Teil) Sie machen den Ajax-request? Wenn nicht, dann sind Sie unterliegt der same-origin-policy.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies passiert bei mir auch eine lange zurück, ich löste dies durch ändern den Datentyp auf text, und geben Sie manuell konvertieren, das auf json-Objekt durch eval.
Kann diese Arbeit für Sie.
Möchte ich hinzufügen, eine vollständige Funktion und überprüfen Sie die text-status. Das sollten die Informationen, die Sie benötigen, um das problem zu lösen.
Ich denke, das problem ist, was ich bisher erlebt haben, und ich glaube, ich habe die Antwort. Wie es aussieht, wird Ihr Anruf abrufen einer HTML-Ansicht, wie ich es ableiten von "Gerendert main/index.html-Code.erb in layouts/application", obwohl ich bin nicht vertraut mit dem, was API-Stapel, den du verwendest.
Meine Symptome auf ASP.NET MVC 5 waren, die vollständig genannt wurde, aber keiner der Fehler, Erfolg oder timeout genannt wurden. Auf das response-Objekt, status 200 und statusText-war "OK", aber das textStatus-parameter wurde "parsererror".
ResponseText ist die html, die ich erwartet hatte, aber ich hatte vergessen, dass ich verschoben, abrufen von json in html, so dass nach der änderung datatype: 'json', um datatype: 'html', es funktioniert jetzt.
Ist es nicht offensichtlich, das die Methode aufruft, die Sie erwarten, in Anbetracht dieser Klasse:
Sollten wir etwas sehen, wie diese in Ihren logs:
Aber deine logs zeigen:
Meine Vermutung ist, dass Sie Ihre Routen sind falsch. Überprüfen Sie die Routen und warum es nicht das aufrufen der
UsersController#show
Methode. Auch nur um sicher zu sein, mit dem browser (chrome, firefox), sollten Sie in der Lage sein, zu untersuchen, die Antwort der Anfrage um sicherzustellen, dass es ist tatsächlich empfangen von json oder html.Da es Rendern
main.html.erb
. Ich bin nicht überrascht, dass diedataType: "json"
funktioniert nicht. Aber es sollte funktionieren, wenn Sie waren tatsächlich wieder gültiges json. Aber Ihre rails-Protokolle zeigen Sie uns, dass Sie wahrscheinlich html zurückgeben.