Я использую ASP.NET MVC, чтобы опубликовать JSON из jQuery и получить JSON обратно, используя эту небольшую библиотечную функцию:
(function($) {
$.postJson = function(url, data) {
return $.ajax({
url: url,
data: JSON.stringify(data),
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
};
})(jQuery);
Итак, я назову это так:
$('#button').click(function() {
$.postJson('/controller/action', { Prop1: 'hi', Prop2: 'bye' })
.done(function(r) { alert('It worked.'); })
.fail(function(x) { alert('Fail! ' + x.status); });
});
ASP.NET MVC 3 и ASP.NET MVC 4 поддерживают отправную точку (до этого вам нужно было расширить ASP.NET MVC для обработки отправки JSON), но проблема, с которой я сталкиваюсь, возвращается. На контроллере я часто возвращаю null, чтобы в основном сказать "Успех, больше ничего не могу сказать", например:
[HttpPost]
public JsonResult DoSomething(string Prop1, string Prop2)
{
if (doSomething(Prop1, Prop2)
return Json(null); // Success
return Json(new { Message = "It didn't work for the following reasons" });
}
Я часто использую этот шаблон, и он отлично работает - мой успешный/сделанный обратный вызов вызван, и все хорошо. Но в последнее время я обновил ASP.NET MVC и jQuery, и он перестал работать - вместо этого мой отказ callback вызывается каждый раз, когда я return Json(null);
. Кроме того, я проверил ответ, и возвращаемый статусCode на самом деле составляет 200, поэтому сервер не терпит неудачу - jQuery просто говорит, что это так.