ASP.NET MVCを使用して jQuery から JSON を投稿し、次の小さなライブラリ関数を使用して 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 は、サブミット側をサポートします (その前に、JSON のサブミットを処理するために ASP.NET MVC を拡張する必要がありました) が、私が遭遇した問題は返ってきました。コントローラーでは、基本的に「成功、他に言うことは何もない」と言うために 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 をアップグレードしたところ、機能しなくなりreturn Json(null);
ました。さらに、応答を調べたところ、返された statusCode は実際には 200 であるため、サーバーは失敗していません。jQuery は失敗していると言っているだけです。