【问题标题】:How to make Connect not callback when reload page in YUI?在 YUI 中重新加载页面时如何使 Connect 不回调?
【发布时间】:2011-04-12 11:09:43
【问题描述】:

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

在我的页面中,某些用户操作会触发 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'} 调用“失败”回调。这与其他类型的连接失败没有区别。所以,我无法根据回调对象判断是否是卸载阶段。

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

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

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

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

谢谢

【问题讨论】:

  • 你不能用unload代替beforeunload吗?至少那将是一个标准事件。
  • 我试过了。但是在触发卸载事件处理程序之前调用了 Connect 回调。

标签: javascript ajax events yui onbeforeunload


【解决方案1】:

从 tye 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),不过你可以试试看。

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 2010-12-24
    • 2011-03-28
    • 2020-03-01
    • 1970-01-01
    • 2018-06-28
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多