Mam jQuery, który wygląda tak:Jak ustawić contentType posta ajax jQuery tak, aby ASP.NET MVC mógł go odczytać?
$.ajax({
type: "POST",
url: "/Customer/CancelSubscription/<%= Model.Customer.Id %>",
contentType: "application/json",
success: refreshTransactions,
error: function(xhr, ajaxOptions, thrownError) {
alert("Failed to cancel subscription! Message:" + xhr.statusText);
}
});
Jeśli akcja miano powoduje wyjątek będzie ostatecznie odebrano przez Global.asax Application_Error gdzie mam trochę kodu:
var ex = Server.GetLastError();
if (Request.ContentType.Contains("application/json"))
{
Response.StatusCode = 500;
Response.StatusDescription = ex.Message;
Response.TrySkipIisCustomErrors = true;
}
else
{
// some other way of handling errors ...
}
Kiedy wykonuję skrypt, który robi post, Request.ContentType jest zawsze pustym łańcuchem i dlatego nie uderza w pierwszy blok if. Czy jest jakaś inna wartość, którą powinienem umieścić w "contentType" ajax? Czy jest inny sposób, aby powiedzieć asp.net, że typem treści powinien być "application/json"?
Wyjaśnienie
Celem staram się osiągnąć to, aby przekazać komunikat wyjątku powrotem do ajax zdarzenia błędu. Obecnie, mimo że blok IF jest pomijany, zdarzenie błędu poprawnie zgłasza okienko alertu, ale komunikat "Nie znaleziono".
Jak widać, próbuję ustawić komunikat o wykryciu na Response.StatusDescription, który moim zdaniem Xhr.statusText w błędzie ajax jest ustawiony na.
Zmieniło w jQuery 1.4, teraz zawsze wysyła typ zawartości ... Ważna uwaga :) http://api.jquery.com/jQuery.ajax/ –
Przetestowałem tę metodę na zewnątrz i to działa. Używamy jQuery 1.3.2 tutaj. Z tego, co Nick opisuje, wynika, że mój kod w pytaniu powinien działać z wersją 1.4. –
To jest poprawna odpowiedź. Modyfikowanie ustawienia typu zawartości obiektu XHR w beforeSend nie działa poprawnie w niektórych przeglądarkach, a usługa zwróci XML zamiast JSON. –