jquery.post () gibt 200 OK von MVC 4 WebAPI zurück, aber der Fehlerhandler ist betroffen

9

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 894ms

     

Kopfzeilen

     

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!

    
Andreas 28.10.2012, 19:32
quelle

4 Antworten

3

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%     
pete 28.10.2012 19:55
quelle
0

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.

    
kamiar3001 03.06.2013 07:22
quelle
0

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%     
Robin van der Knaap 25.06.2014 14:14
quelle
0

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

    
Alex Hopkins 20.07.2015 09:35
quelle