如何使用 c# MVC4 在 $.ajax 中调用错误函数
How to call error function in $.ajax with c# MVC4?
我在MVC4中使用C#有一个项目。在这个项目中,我的一个控制器有一个由 Ajax 函数调用的方法:
[HttpPost]
public string EditPackage(int id, string newPkgName)
{
try{
//do logic here
return "OK";
}catch(Exception exc){
return "An error occurred, please try later! " + exc.Message;
}
}
此方法由以下 Ajax 函数使用 jQuery 调用:
$.ajax({
url: $(this).data('url'),
type: 'POST',
contentType: 'application/json; charset=utf-8',
traditional: true,
data: JSON.stringify({ id: id, newPkgName: newPkgName}),
success: function () {
location.reload(true);
successNotification("Package edited successfuly!");
},
error: function (message) {
errorNotification(message);
}
});
此代码的问题在于,即使服务器在 catch 中返回返回"An error occurred, please try later! " + exc.Message;
消息,成功函数也是始终调用的函数。
换句话说,无论我做什么,我都不会运行错误函数。
为了解决这个问题,我检查了官方文档:
- http://api.jquery.com/jQuery.ajax/
但是,由于我是新手,因此我无法理解任何参数,也无法了解如何有效地使用它们。
如何使用 Ajax、jQuery 和我的控制器创建包含所有可能信息的良好错误消息?
仅
当返回的状态代码不是200 OK
时,才会触发$.ajax
调用的error
部分。在您的情况下,您返回的纯文本响应将因此200
。您可以像这样更改此行为:
try {
// do logic here
return "OK";
}
catch (Exception exc) {
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Bad Request");
}
error: function (jqXHR, textStatus, errorThrown) {
errorNotification(textStatus);
}
您可以将HttpStatusCode
更改为适合您需要的任何内容。
或者,您可以保留200
响应并返回带有标志的 JSON,以指示请求是否成功:
[HttpPost]
public ActionResult EditPackage(int id, string newPkgName)
{
try {
//do logic here
return Json(new { Success = true, Message = "OK"});
}
catch (Exception exc) {
return Json(new { Success = false, Message = "An error occurred, please try later! " + exc.Message });
}
}
然后,您可以删除error
处理程序,并在success
处理程序中检查标志的状态:
success: function(response) {
if (response.Success) {
location.reload(true);
successNotification("Package edited successfuly!");
}
else {
errorNotification(response.Message);
}
},
我执行以下操作,这可能不是最好的方法,但它适用于我尝试做的事情。
[HttpPost]
public ActionResult EditPackage(int id, string newPkgName)
{
try{
//do logic here
return Json(new {Success = true, Message = "OK"});
}catch(Exception exc){
return Json(new {Success = false, Message = "An error occurred, please try later! " + exc.Message});
}
}
然后我的 Ajax 如下所示:
$.ajax({
url: $(this).data('url'),
type: 'POST',
contentType: 'application/json; charset=utf-8',
traditional: true,
data: JSON.stringify({ id: id, newPkgName: newPkgName}),
success: function (data) {
if(data.Success)
{
location.reload(true);
successNotification("Package edited successfuly!");
}
else
{
errorNotification(data.Message);
}
},
error: function (message) {
errorNotification(message);
}
});
我这样做是为了让您拥有从服务器捕获 http 错误的标准错误,但这意味着您可以以更有用的方式传递成功或失败。这也意味着,如果您的更新由于验证原因或其他原因而失败,您可以很好地将该消息传回。
相关文章:
- JavaScriptajax请求servlet调用错误回调函数
- 在firefox中,使用jquery ajax不会调用错误和完整回调
- AJAX rest调用错误”;意外的令牌<&”;
- 非法调用错误 jquery
- 如何修复chrome扩展内联JavaScript调用错误
- 调用module.exports上的函数时发生CommonJS非法调用错误
- JavaScript私有函数调用错误
- AngularJS在使用method:POST时$resource调用错误的API URL
- xwiki REST ajax 调用错误
- 特威利奥:首次通话成功;第二个和后续调用错误
- 在未实现接口 XMLHttpRequest 的对象上调用错误“open”
- 未捕获的类型错误:从 ajax 发送数据时出现非法调用错误
- Ajax调用错误的方法
- DWR 在 Javascript 中调用错误
- 如何使用 c# MVC4 在 $.ajax 中调用错误函数
- 仅在某些浏览器上调用错误
- Amazon AWS listObjects 调用错误
- ajax表单提交但调用错误函数
- AngularJS REST调用错误
- console.log传入函数时发生非法调用错误