Ständig erhalten 400 (Bad Request) auf jquery ajax post zu MVC-controller
Mein ajax-Aufruf sieht wie folgt aus
$.ajax({ //actually approve or reject the promotion
url: url,
type: "POST",
data: '{'+data.PromotionId+','+data.UserId+','+data.ReasonText+'}',
dataType: "json",
//contentType: "application/json; charset=utf-8",
success: function (data) {
if (indicator == 'A') {
alert('Promotion approved successfully!');
}
else {
alert('Promotion rejected successfully.');
}
var homelink = '<%: Url.Action("Index","Home") %>';
window.location.href = (homelink);
returndata = data;
},
error: function (xhRequest, ErrorText, thrownError) {
alert("Failed to process promotion correctly, please try again");
console.log('xhRequest: ' + xhRequest + "\n");
console.log('ErrorText: ' + ErrorText + "\n");
console.log('thrownError: ' + thrownError + "\n");
}
});
Und mein MVC-controller sieht wie folgt aus:
[HttpPost]
public HttpResponseMessage ApprovePromotion(PromotionDecision decision)
{
if (ModelState.IsValid && decision != null)
{
bool status = PromotionBo.ApprovePromotion(decision);
if (status == true)
return new HttpResponseMessage(HttpStatusCode.OK);
}
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
Ich hatte gedacht, dass die syntax richtig war, auf diese beiden, aber jedes mal, wenn ich den ajax-Aufruf bekomme ich einen 400-Antwort. Was ist es, was ich falsch mache?
InformationsquelleAutor Pseudonym | 2013-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie senden ein völlig gebrochen und ungültige JSON-string an den server. Es ist normal, dass die controller-Aktion, lehnt Sie ab. Zusätzlich zu, dass Sie in Kommentaren das
contentType
parameter, die angeben, dass Sie möchten, senden Sie eine JSON-Anfrage.So, hier ist der richtige Weg, um die Anfrage:
Bemerken, wie ich bin, mit der
JSON.stringify
Methode, die nativ integrierte in modernen Browsern, um sicherzustellen, dass die JSON an den server gesendet wird ist richtig und alle Werte sind korrekt codiert. Und wenn Sie brauchen, um Unterstützung für Browser aus der Steinzeit, Sie könnten diejson2.js
Skript zu Ihrer Seite, die definieren, dieJSON.stringify
Methode.Wichtige Bemerkung: Absolut nie bauen JSON-strings mit string Verkettungen wie in deinem code.
Alternativ, wenn Sie nicht möchten, senden Sie eine JSON-Anfrage könnten Sie schicken eine standard -
application/x-www-form-urlencoded
Anfrage:Diese sollten auf die gleiche Weise arbeiten und die controller-Aktion, sollte in der Lage sein, um richtig zu binden, das Modell.
Bemerkung: ich habe bemerkt, dass Sie die folgende Zeile in der Erfolgs-callback:
returndata = data;
. Dies führt mich zu glauben, dass Sie irgendwie versuchen zu konsumieren, das Ergebnis eines asynchronen AJAX-request außerhalb der Erfolgs-callback, das ist nicht möglich. Ich habe keine Ahnung, was Sie tun mit diesemreturndata
Variablen, aber ich habe das Gefühl es ist falsch.Es funktionierte perfekt, vielen Dank für deine hilfreiche und informative Antwort.
Tolle Antwort...
InformationsquelleAutor Darin Dimitrov