Ich habe einen seltsamen Fall, bei dem mein jquery.post einen Code # 200 (OK) zurückgibt, aber der Fehlerhandler wird getroffen.
Dies ist mein MVC WebAPI serverseitiger Code (es gibt nur den Code # 200 zurück):
%Vor%und das ist mein Client-Skript
%Vor%Die Konsolenausgabe in Firebug ist:
POST
http://localhost:55482/M/
200 OK 894msKopfzeilen
Antwortheader
Inhaltslänge 6
Content-Type-Anwendung / json; charset = utf-8
Datum Sun, 28. Oktober 2012 18:55:17 GMT
Server Microsoft-HTTPAPI / 2.0
Anfrage Kopfzeilen
Akzeptieren Sie /
Accept-Encoding gzip, deflate
Akzeptieren-Sprache nb-nein, nb; q = 0,9, nein-nein; q = 0,8, nein; q = 0,6, nn-nein; q = 0,5, nn; q = 0,4, en-us; q = 0,3, en; q = 0,1
Verbindung aufrecht erhalten
Inhaltslänge 21
Content-Type-Anwendung / x-www-form-urlencoded; charset = UTF-8
Host localhost: 55482
Ursprung null
Benutzer-Agent Mozilla / 5.0 (Windows NT 6.2; WOW64; rv: 16.0) Gecko / 20100101 Firefox / 16.0
und
Objekt {readyState = 0, Status = 0, StatusText="Fehler"}
Fehler
(eine leere Zeichenfolge)
Ich habe herumgeblättert und gesehen, dass andere ähnliche Probleme hatten, normalerweise ein fehlerhafter JSON in der Antwort. Da ich nur 200 OK und keinen Inhalt zurückgebe, scheint mir das nicht zu passen. Ich habe jedoch versucht, ein leeres Objekt wie folgt zurückzugeben.
%Vor%Der Server wird von Visual Studio 2012 ausgeführt, und der Client ist nur ein eigenständiges .html mit einigen .js-Dateien. Auch mit einem Haltepunkt in VS weiß ich, dass die Anfrage vom Server empfangen wird, und mit Postman für Chrome funktioniert alles super.
Die Frage ist natürlich: Was mache ich hier falsch? Warum ist der Fehlerhandler betroffen?
Danke!
Versuchen Sie es stattdessen:
%Vor% Damit können Sie einen erwarteten Rückgabe-MIME-Typ von application/json
festlegen.
AKTUALISIEREN
Wenn Sie Ihre eigenständige HTML-Seite unter http://localhost:55482
ausführen, ist sie nicht domänenübergreifend. Wenn Sie es auf file:///C:/Users/.../Desktop/test.htm
oder anderswo ausführen, handelt es sich um eine domänenübergreifende Anfrage. http
gegenüber https:
macht auch den Unterschied.
Eine jsonp
Anfrage ist eine GET
Anfrage und kann keine POST
sein. Dies liegt daran, dass jsonp
-Anforderungen implementiert werden, indem Sie der Seite mit der Quelle, die für Ihre URL festgelegt wurde, ein <script>
-Element hinzufügen, wobei data
an die Abfragezeichenfolge angehängt wird (plus einem Zeitmarkenparameter). Alle POST
-Anfragen, die eine Rückgabe von jsonp
erwarten, sollten automatisch in GET
-Anforderungen konvertiert werden.
Schließlich, da Ihre Routine Daten zurück erwartet, müssen Sie einige tatsächliche Daten zurückgeben, da jQuery versucht, den zurückgegebenen JSON in ein Objekt zu analysieren (was nicht möglich ist, wenn keine Daten zurückgegeben werden) und einen Fehler auslöst wenn die Daten nicht analysiert werden können.
Versuchen Sie, Ihre Antwortnachricht zu ändern:
%Vor%Wie ich verstanden habe, brauchen Sie domänenübergreifend, also sollten Sie einen Handler oder Service-Anrufer haben
lesen THIS könnte es für dich nützlich sein.
Fügen Sie JsonpFormatter als Filter beim Programmstart hinzu, dann können Sie jsonp genießen.
Es ist durchaus möglich, dass es etwas mit der leeren Antwort zu tun hat, die Sie senden. Siehe diesen Fehlerbericht: Ссылка
Sie können dies lösen, indem Sie eine leere Zeichenfolge als Antwort festlegen.
%Vor%Der Fehlerbericht enthält eine Problemumgehung, bei der ein Nachrichtenhandler erstellt wird, der eine leere Zeichenfolge mit Inhalt == null hinzufügt.
%Vor%Ich habe gerade dieses Problem bei der Verwendung einer JSON-Anfrage an einen WebApi 2-Dienst festgestellt. Für mich wurde es gelöst, indem einfach die Parameterliste für die Erfolgs- und Fehlerfunktionen geändert wurde (auf der WebApi-Seite waren keine Änderungen erforderlich)
Ich habe meinen Code von diesem geändert
%Vor%zu diesem
%Vor%Beachten Sie die Änderung in der Liste der Argumente
Tags und Links asp.net-web-api jquery cross-domain jquery-post