代码之家  ›  专栏  ›  技术社区  ›  Morgan Cheng

在yui中重新加载页面时,如何使connect不回调?

  •  3
  • Morgan Cheng  · 技术社区  · 14 年前

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

    在我的页面中,一些用户操作会触发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 回复  |  直到 14 年前
        1
  •  0
  •   RMorrisey    14 年前

    来自泰伊 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),但是您可以尝试一下。