在ajax调用期间回发

时间:2013-10-16 19:00:26

标签: javascript jquery asp.net ajax

在我的页面中使用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调用期间刷新了页面,则向我的用户发送消息。

由于

1 个答案:

答案 0 :(得分:2)

我重新创建了您的问题,但仅限于Chrome;它在Internet Explorer 10中工作正常。

认为这是一个缓存的请求问题,我尝试在jQuery cache: false设置中设置.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.');
}