2013-03-10 57 views
2

我正在使用以下代码将数据从服务器异步拉入客户端。错误块中的警报报告服务器上发生的错误。但是,如果用户导航离开页面中间调用,该块也会被触发并抛出一个空的警报容器。有没有办法处理用户更优雅的离开页面(即在离开之前不会抛出空的警报)?也许通过区分用户已导航的错误块而不是服务器上发生的错误?离开页面时出现JQuery Ajax错误

$.ajax({ 
    type: "GET", 
    url: "/handlers/myHandler.ashx", 
    async: true, 
    dataType: "json", 
    data: "var1=test_val&var2=test_val" 
    success: function (invoices) { 
     //Success block 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 
+0

1)您应该使用HTML元素来报告失败,而不是警报(这是一个很老的和提供信息的方式)。 2)你可以尝试为'unload'或'beforeunload'添加一个钩子来设置一个变量来防止错误,但是我不知道事件的顺序是否正确。 3)你可以简单地避免显示一条消息,如果它是空的。 – Dave 2013-03-10 19:42:33

+0

谢谢,我同意,'提醒'在我们应用程序的早期阶段使用,以方便使用。我会研究这些事件。 – QFDev 2013-03-10 20:26:07

+0

可能的重复[如何处理jQuery ajax后导航离开页面错误](http://stackoverflow.com/questions/9229005/how-to-handle-jquery-ajax-post-error-when-navigating-离开页面) – romor 2016-02-16 20:23:22

回答

2

问题解决了..

我给自己定了一个全局变量:

var unloadingState = false; 

然后,beforeunload事件句柄(感谢戴夫!),修改变量:

$(window).bind("beforeunload", function() { 
    unloadingState = true; 
}); 

最后一个交叉引用ajax方法的错误块:

error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert(errorThrown); 
} 

是的警报是丑陋的,不应该使用!

+4

你忘了在你的javascript代码中添加一个'if(!unloadingState){'? – wal 2014-08-11 03:31:53

2

尝试...

if (xhr.status != 0) 
    alert(thrownError); 

...其中XHR是你的XMLHttpRequest可变