jquery ajax post with error and success message returned from the server
这是我的看法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @using ( Html.BeginForm("jQueryPost","Home",null, FormMethod.Post, new { id="FormPost" })) { @Html.TextBoxFor(x=> x.Name)<br /> @Html.TextBoxFor(x => x.LastName)<br /> @Html.TextBoxFor(x => x.Age) <input type=submit value="submit" /> } $(document).ready(function () { $('#FormPost').submit(function (e) { //This line will prevent the form from submitting e.preventDefault(); alert('ajax post here'); $.ajax({ type: 'POST', url: $('#FormPost').attr('action'), data: $('#FormPost').serialize(), accept: 'application/json', error: function (xhr, status, error) { alert('error: ' + xhr.statusText); }, success: function (response) { alert('resp: ' + response.data); } }); }); }); |
这是家庭控制器的方法,表格发布到:
1 2 3 4 5 6 | [AcceptVerbs(HttpVerbs.Post)] public JsonResult jQueryPost(IndexVM vm) { IndexVM _vm = vm; return Json("name posted was:" + _vm.Name); } |
当我提交表单时,我会在警告框中显示"resp:undefined"。 如何将"发布的名称为:......"文本返回到成功帖子的视图?
当我将此行添加到操作时也是例外
1 2 3 4 5 6 7 | [AcceptVerbs(HttpVerbs.Post)] public JsonResult jQueryPost(IndexVM vm) { IndexVM _vm = vm; throw new Exception("custom error string from action"); return Json("name posted was:" + _vm.Name); } |
我收到消息'错误:内部服务器错误'。 我想在错误中返回消息的文本,如下所示:'错误:自定义错误字符串来自行动'这样做的方法是什么?
谢谢
如果你只是在这样的控制器动作中抛出异常,那么就没有一种友好的方式让它们回到前端。如果您注意到,最终将使用默认模板中的页面html进行例外处理。
另一方面,我不相信这是一个很好的做法,因为你只是扔掉它们来回复消息。
另一个问题解释了从ASP.NET MVC控制器处理"错误"的好方法。
ASP净MVC-Ajax的错误处理
尝试改变你这样的代码,
1 2 3 4 5 6 | error: function (xhr, status, error) { alert('error: ' + xhr.statusTexterror); }, success: function (response) { alert('resp: ' + response); } |
更新
以下是
- readyState的
- 状态
- 状态文本
- 当底层请求分别用xml和/或文本响应时,responseXML和/或responseText
- setRequestHeader(name,value),它通过将旧值替换为新值而不是将旧值与旧值相连接而脱离标准
- getAllResponseHeaders()
- getResponseHeader()
- 的StatusCode()
- 中止()