我们使用jQuery的全局ajaxError()处理程序来警告用户任何AJAX失败:
$(document).ajaxError(function() { $("There was a network or server error. Please try again later.").dialog({ title: "Error",modal: true,resizable: false,buttons: { 'Ok': function() { (this).dialog("close"); } } }); });
不幸的是,如果用户在完成加载之前离开页面,这个全局错误处理程序也会触发。以下是重现错误的步骤:
>用户访问页面A,其中包括通过AJAX加载的元素。
> AJAX元素开始加载。
>用户点击链接以访问网页A上的AJAX元素完成加载之前的网页B.
>在浏览器重定向到页面B之前,会短暂出现错误对话框。
任何想法如何我们可以得到ajaxError()不触发时的错误是直接造成的用户访问一个新的页面?
// I added a 3 second delay to our error dialog,enough time // for the user to leave for a new page: $(document).ajaxError(function() { setTimeout(my_error_handler,3000); }); // Warn user before leaving page if AJAX is still loading. // Not sure I'll keep this: $(document).ajaxStart(function() { ajaxing = true; }); $(document).ajaxStop(function() { ajaxing = false; }); window.onbeforeunload = function() { if (typeof(ajaxing) != 'undefined' && ajaxing) { return "Page elements are still loading!"; } };