1

在我的页面中有一个使用 jquery 的 ajax 调用:

$.ajax(
{
    type: "POST",
    url: "MyPage.aspx/myMethod",
    data: parameters,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg)
    {
      alert("Success");
    },
    error: function(e, textStatus, errorThrown)
    {
       alert("Error");
    },
    complete: function(s, e)
    {
        alert("it is done");
    }

}

一切正常,除非用户在发送 Ajax 调用(但尚未返回)时刷新页面(或导致回发),它会自动进入“错误:”方法。

有没有办法避免这种情况?如果他只是在 ajax 调用期间刷新页面,我不想向我的用户显示“错误”消息。

谢谢

4

1 回答 1

2

我重新创建了您的问题,但仅在 Chrome 中;它在 Internet Explorer 10 中运行良好。

认为这是一个缓存请求问题,我尝试cache: false在 jQuery.ajax()设置中进行设置,但无济于事。

处理返回的特定错误似乎可行,尽管它不是一个非常优雅的解决方案:

$.ajax({
    type: "POST",
    url: "MyPage.aspx/myMethod",
    data: parameters,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg){
        alert("Success");
    },
    error: function(e, textStatus, errorThrown){
        if (e.status === 0) {
            alert("Error status 0.");
        } 
        else {
            alert("Error");
        }
    },
    complete: function(s, e){
        alert("it is done");
    }
}

注意:您很可能只想忽略错误状态 0,因此我将删除alert("Error status 0.");,但出于调试目的,我将其留在了那里。

更新:

您可以捕获其他状态代码,例如:

else if (jqXHR.status == 404) {
    alert("Requested page not found. [HTTP 404]");
} 
else if (jqXHR.status == 500) {
    alert("Internal Server Error [HTTP 500].");
}
else if (exception === 'parsererror') {
    alert("Requested JSON parse failed.");
} 
else if (exception === 'timeout') {
    alert("Time out error.");
} 
else if (exception === 'abort') {
    alert("AJAX request aborted.');
}
于 2013-10-16T20:06:24.120 回答