2016-08-29 2 views
4

Ich habe den Code unten, mit Arbeiten fein auf der Maschinenentwicklung, aber nicht, wenn sie von einem Remote-Browser aufgerufen ...

$.ajax({ 
    type: 'POST', 
    url: '@Url.Action("Action", "Controller")', 
    data: { id: id }, 
    dataType: 'json', 
    async: true, 
    success: function (data) { 
    }, 
    error: function (jqXHR, status, err) { 
    var result = jqXHR.responseJSON; 
    } 
}); 

Der Das jqXHR.responseJSON-Objekt funktioniert beim Aufruf von localhost, aber nicht, wenn der Anruf von einem entfernten Computer aus getätigt wird. Es wird als undefined zurückgegeben ... Kann mir jemand helfen? Vielen Dank im Voraus!

enter image description here

+0

Was bekommen Sie stattdessen in 'jqXHR' zurück? – Jasen

+0

Hallo Jasen, danke für die Antwort! Auf dem Entwicklungscomputer gibt es ein responseJSON-Array sowie einen antworttext mit der json-Zeichenfolge korrekt zurück, aber wenn es von einem fernen Computer aufgerufen wird, ist das responseJSON-Objekt nicht vorhanden und gibt null zurück, und responseText enthält nur "Ungültige Anforderungsnachricht" da ich den Antwortstatuscode als 400 signiert habe. Ich habe die Frage mit einem Bild des Ergebnisses bearbeitet ... –

+0

Haben Sie einen Fehler in der Konsole? Hat es etwas mit CORS zu tun? Alles in der Konsole wie "Access-Control -Origin ...." – Developer

Antwort

5

Ich habe irgendwie das gleiche Problem gehabt. Beim Testen auf meinem lokalen Rechner mit localhost ist der ResponseJSON gefüllt. Wenn ich mein Projekt zu dem Testserver und Test laden, ist mein responseJSON undefiniert und die response ist nur die statusdescription geben, die ich geschickt:
(dies ist ein JsonResult aber ich habe es als Action getan)

Response.StatusCode = 400; 
Response.StatusDescription = "Bad Request - Model State is Invalid"; 
return Json(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)), JsonRequestBehavior.AllowGet); 

und für Action speziell ich auch versucht:

return new HttpStatusCodeResult(400, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors))); 

, die mir ein paar Fehler gab.

Ich versuchte mit JsonResult den folgenden Code, der lokal arbeitete (aber ich hatte einen Syntaxfehler in der JSON), aber nicht auf dem Testserver.

return Json(new { success = false, responseJSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)) }, JsonRequestBehavior.AllowGet); 

Dies ist ein neuer Test (siehe oben), wenn ich eine AJAX-Anforderung verwendet, um ein Form-Modell eines MVC-Controller zu senden. Ich habe gelesen, dass es domänenübergreifend ist, aber das macht keinen Sinn.

Ich habe einen Web-API-Controller erstellt und die Methodeninformationen dort eingefügt. Das ist, weil ich HttpReponseMessage verwenden wollte, und ich dachte, dass das ein WebAPI-Typ war. Nachdem das Modell und der JSON und alles zusammen zu arbeiten, habe ich getestet und rate was?

Wenn ich die HttpResponseMessage als Rückgabetyp in WebAPI und zurück wie folgt aus:

return Request.CreateResponse(HttpStatusCode.BadRequest, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors))); 

Die responseJSON und response beide richtig füllen.

Ich weiß nicht, warum es nicht funktioniert, und wenn jemand eine Antwort dafür hat, bitte sagen Sie uns.

Für mich ist dies eine Arbeit, weil ich das Gefühl habe, dass es den ersten Weg hätte funktionieren sollen.

UPDATE: Mit dem Original-Code mit dem MVC-Controller- und das Hinzufügen von

Response.TrySkipIisCustomErrors = true; 

machten die responseJSON erscheinen.

+0

Ja, das ist alles seltsam! Ich werde Ihre Lösung versuchen, um zu sehen, ob es mit MVC-Projekten funktioniert ... Vielen Dank! –

+0

@JuniorSilva mit Request.TrySkipIisCustomerErrors = true; Arbeitet mit ActionResult auf dem MVC-Controller, der Json zurückgibt (Serialisierungsmodellfehler, AllowGet); – nebulous

+0

Ja! Es funktioniert wie ein charmantes ... Vielen Dank Jungs, rettete mein Leben! –