Tôi có một số jQuery trông như thế này:Làm thế nào tôi có thể thiết lập contentType của một bài đăng ajax jQuery để ASP.NET MVC có thể đọc nó?
$.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);
}
});
Nếu hành động được gọi là gây ra một ngoại lệ nó cuối cùng sẽ được chọn bởi Global.asax Application_Error nơi tôi có một số mã như thế này:
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 ...
}
Khi tôi thực thi tập lệnh đăng bài, Request.ContentType luôn là chuỗi trống và do đó không nhấn vào khối đầu tiên nếu khối. Có một số giá trị khác mà tôi nên đặt trong ajax "contentType" không? Hoặc là có một cách khác để tôi nói với asp.net rằng loại nội dung nên là "application/json"?
Làm rõ
Mục đích tôi đang cố gắng để đạt được là phải vượt qua các thông điệp ngoại lệ trở lại trường hợp lỗi ajax. Hiện tại, mặc dù khối IF đang bị bỏ qua, sự kiện lỗi sẽ ném một hộp cảnh báo chính xác nhưng thông báo là "Không tìm thấy".
Như bạn có thể thấy tôi đang cố gắng đặt thông báo lừa đảo cho Response.StatusDescription mà tôi tin rằng xhr.statusText trong lỗi ajax được đặt thành.
Điều này đã thay đổi trong jQuery 1.4, bây giờ nó luôn gửi loại nội dung ... lưu ý quan trọng :) http://api.jquery.com/jQuery.ajax/ –
Tôi đã thử nghiệm phương pháp này và nó hoạt động. Chúng tôi đang sử dụng jQuery 1.3.2 tại đây. Từ những gì Nick mô tả nó giống như mã của tôi trong câu hỏi nên làm việc với 1,4. –
Đây là câu trả lời đúng. Sửa đổi cài đặt kiểu nội dung của đối tượng XHR trong beforeSend không hoạt động ngay trong một số trình duyệt và dịch vụ sẽ trả về XML thay vì JSON. –