jquery AJAX对web方法的调用未运行错误函数
本文关键字:运行 错误 函数 调用 AJAX web 方法 jquery | 更新日期: 2023-09-27 18:25:27
我在jquery中调用的aspx页面上有一个WebMethod,我试图让它在弹出框中显示抛出异常的消息,但调试器没有在错误函数下运行代码,而是停止说"用户未处理异常"。如何将错误返回到客户端?
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void SubmitSections(string item)
{
try
{
throw new Exception("Hello");
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
throw new Exception(ex.Message, ex.InnerException);
}
}
在我的js文件中:
$.ajax({
type: "POST",
url: loc + "/SubmitSections",
data: dataValue,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (Result) {
$("#modal-submitting").modal('hide');
document.location = nextPage;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#modal-submitting").modal('hide');
alert("Request: " + XMLHttpRequest.toString() + "'n'nStatus: " + textStatus + "'n'nError: " + errorThrown);
}
});//ajax call end
您应该返回一个错误,例如Http状态代码500,作为错误在客户端进行处理。
服务器端的引发错误不会返回到客户端。
对于WebMethod,您应该设置Response.StatusCode.
HttpContext.Current.Response.StatusCode = 500;
我认为您的问题是从客户端脚本发出JSON请求,但catch块只是将文本写入响应,而不是JSON,因此客户端错误函数不会启动。
尝试使用Newtonsoft.Json之类的库将.NET类转换为Json响应。然后,您可以创建一些简单的包装器类来表示响应数据,例如:-
[Serializable]
public class ResponseCustomer
{
public int ID;
public string CustomerName;
}
[Serializable]
public class ResponseError
{
public int ErrorCode;
public string ErrorMessage;
}
在你的接球区。。
var json = JsonConvert.SerializeObject(new ResponseError
{
ErrorCode = 500,
ErrorMessage = "oh no !"
});
context.Response.Write(json);
顺便说一句:throw new Exception(...)
不是推荐的做法,因为您会丢失堆栈跟踪,这对调试或日志记录没有帮助。如果需要重新抛出异常,建议您只调用throw;
(无参数)。