2013-03-10 54 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可變