在YUI中重新加载页面时如何使Connect不回调?

时间:2010-09-15 01:52:15

标签: javascript ajax events yui onbeforeunload

我发现这是一个常见问题,但谷歌搜索后似乎没有明显的解决方案。

在我的页面中,某些用户操作会触发AJAX请求。使用YUI 2.X,代码如下:

Connect.asyncRequest("POST", url, 
   {
      'failure' : function() { alert('failed'); },
      'success': function() { doSuccess(); },
      'scope": this,
   },
   dataStr);

当AJAX请求失败时,我想弹出一个对话框(不一定是警告)来显示失败。但是,如果AJAX请求需要几秒钟,并且我点击“刷新”按钮重新加载页面,则会弹出对话框。这个不好。所以我想在重新加载时压制对话框。

重新加载页面时,将使用对象{status:0,statusText:'communication failure'}调用“failure”回调。这并不区别于其他类型的连接故障。所以,我无法根据回调对象判断它是否正在卸载阶段。

目前,我的解决方法是收听“beforeunload”事件。

Event.on(window, 'beforeunload', function() { isUnloading = true; });

失败回调检查是否根据isUnloading值显示对话框。

这样可行,但“beforeunload”事件不是标准的。有没有更好的方法来处理这种情况?

由于

1 个答案:

答案 0 :(得分:0)

YUI 2 API看起来你应该能够:

var connection = Connect.asyncRequest("POST", url, 
   {
      'failure' : function() { alert('failed'); },
      'success': function() { doSuccess(); },
      'scope": this,
   },
   dataStr);
Event.on(window, 'beforeunload', function() { Connect.abort(connection, function() {...}, false ); });

我没有非常使用YUI(我主要使用jquery),但是你可以尝试一下。