jQuery $.post
を使用して、コントローラ内のActionResultメソッドにデータを投稿しています。コントローラにエラーがスローされると、レスポンスのresponseText内にエラーメッセージが返されるはずですが、動作していません。ASP.NET MVC JsonResultがjQuery.postでコールバック関数のresponseTextを返さない
投稿要求がコントローラに当たっています。
コールバック関数fail
がトリガーされているようです。エラーメッセージが返されないだけです。私が間違っていることを確認していない?
これは、jQueryのポスティングデータである:
var postData = ["1","2","3"];
$.post('/MyController/GetSomething', $.param(postData, true))
.done(function (data) {
alert('Done!');
})
.fail(function (xhr, textStatus, errorThrown) {
alert(xhr.responseText); //xhr.responseText is empty
});
});
コントローラ
public class MyController : BaseController
{
public ActionResult GetSomething(List ids)
{
try
{
GetSomeData(ids);
}
catch (Exception ex)
{
return ThrowJsonError(new Exception(String.Format("The following error occurred: {0}", ex.ToString())));
}
return RedirectToAction("Index");
}
}
public class BaseController : Controller
{
public JsonResult ThrowJsonError(Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
Response.StatusDescription = ex.Message;
return Json(new { Message = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
更新 興味深い何が、私はBaseControllerのうちとMyControllerへのロジックの一部を移動した場合ということです私は希望の結果を得ることができます。
なぜこれが起こりますか?
public class MyController : BaseController
{
public ActionResult GetSomething(List<string> ids)
{
try
{
GetSomeData(ids);
}
catch (Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
Response.StatusDescription = ex.Message;
return Json(new { Message = ex.Message }, JsonRequestBehavior.AllowGet);
}
return RedirectToAction("Index");
}
}
それがコントローラに達するか、前 –
はいエラーを与えない、それは? contrに到達するオレラー。コントローラに例外がスローされた場合、alert(data.Message)を置くと 'Message'は' xhr.ResponseText = "" ' – jgill09
に戻りません。警告の前に( '完了!');何が起こった? – DanielVorph