在 jquery ajax 错误回调中捕获错误
本文关键字:错误 回调 ajax jquery | 更新日期: 2023-09-27 18:34:12
我倾向于在我的应用程序中使用大量对服务器端的jquery ajax调用。
通常,当服务器端出现问题时,我会序列化错误消息并作为响应(JSON)发送。类似于
{ "ErrorMessage" : "Something went wrong: " + ex.message }
我想知道的是,是否有任何方法可以使错误最终出现在 jquery ajax error
回调中,而不是success
。
有什么办法可以做到这一点吗?还是我应该坚持我处理错误的旧方法?提供PHP或 ASP.NET + c#示例并不重要,因为我对两者都感兴趣。谢谢
让它们最终出现在jQuery上的error callback
中。在 ASP.NET 中,您需要做的就是将 web.config 中的custom errors
部分更改为 <customErrors mode="Off" />
但是,如果您采用此路线,请确保将 Web 服务放在单独的文件夹中,以便您只对 Web 服务调用执行此操作,而无需为整个站点关闭此功能;例如:
<location Path="/Services"> <!--Your web service lives here -->
<system.web>
<customErrors mode="Off" />
</system.web>
</location>
这样,Web 方法上抛出的任何异常都将在 jQuery 的error callback
中处理。
您可以让异常传播而不将其缓存在 Web 方法上,也可以捕获它并重新抛出更"用户友好"的消息。
这可以使用 jQuery 1.5+ 中的Deferred
对象。本·纳德尔(Ben Nadel)有一些关于这方面的例子,你可以看看这里 http://www.bennadel.com/blog/2255-Using-jQuery-s-Pipe-Method-To-Change-Deferred-Resolution.htm 和这里 http://www.bennadel.com/blog/2123-Using-Deferred-Objects-In-jQuery-1-5-To-Normalize-API-Responses.htm
这是其JavaScript代码的简化版本
var request = $.ajax({
type: "post",
url: "./web_service.cfm",
dataType: "json"
});
request = request.pipe(
// Filter the SUCCESS responses from the API.
function (response) {
// real success
if (response.success) {
return (response);
}
else {
// The response is actually a FAIL even though it
// came through as a success (200). Convert this
// promise resolution to a FAIL.
return (
$.Deferred().reject(response)
);
}
},
// Filter the FAIL responses from the API.
function (response) {
return ({
success: false,
data: null,
errors: ["Unexpected error: " + response.status + " " + response.statusText]
});
}
);
// Now that our API response has been filtered, let's attach
// our success and fail handlers to the promise resolution.
request.then(
function (response) {
console.log("Success!!!", response);
},
function (response) {
console.log("Fail!!!", response);
}
);