3

これはよくある問題だと思いましたが、グーグルで調べても明らかな解決策はないようです。

私のページでは、ユーザー アクションによって 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」イベントは標準ではありません。このような場合を処理するためのより良い方法はありますか?

ありがとう

4

1 に答える 1

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 を使用しています) が、試してみることができます。

于 2010-09-15T02:11:55.750 に答える