1

Web アプリで他の AJAX 呼び出しを送信する前に、条件を確認して AJAX 呼び出しを実行する必要があります。

この AJAX 呼び出しをajaxSetupbeforeSendに async: false で配置することを考えていました (これが完了する前に最初の呼び出しが実行されないようにするため)。

このようなもの:

//I set an event that fires:
$.ajax({
    type: "GET",
    url: my_url,
    beforeSend: function() {
        //do something, like show a spinner loader gif
    }
});

//Somehwere in my app I also have:
$.ajaxSetup({
    beforeSend: function() {
        if(x===1){
            $.ajax({
                type: "GET",
                url: my_url/fetch_something,
                async:false
            });
        }
    }
});

最初の AJAX 呼び出しでの beforeSend は、ajaxSetup のものをオーバーランしますか? これにアプローチする方法はありますか?

私のアプリのより良いアイデア:

私はアプリを介して多くの Ajax 呼び出しを行っています。各呼び出しはヘッダーにセキュリティ ハッシュを送信してユーザーを検証します。これらのハッシュにも時間制限があります (ハッシュと時間制限の両方が localStorage に保存されます)。

私が ajax セットアップ (およびその中の条件) に求めているのは、時間制限を確認することです。time_limit < current_time の場合は、ajax 呼び出しを実行してユーザーのハッシュを更新します。

これは 1 回または 2 回の呼び出しの演習ではありません。ユーザー ハッシュを使用するアプリで文字通り 20 回以上の増加する Ajax 呼び出しがあり、すべての呼び出しでこのチェックを行うのは非常に非現実的です。

4

3 に答える 3

2

更新しました:

'session'/local-storage を設定する間隔でメソッドを 1 つ持つ

var refreshing = false;
var intervalID;
$(document).ready(function(e){
   var delay = 1234;
   intervalID = window.setInterval(setupInterval, delay);
});

function setupInterval(){
  refreshing = true;
  $.ajax(URL).done(function(r) { //do stuff
    setupStorage(r);
    refreshing = false;
  });
}
function setupStorage(info){
  //setup whatever here
}

年:

実行する必要があることをゲートするために、ready 関数で何らかのロジックを使用できますか?

したがって、基本的に1つのajax呼び出しを呼び出します-> falseの場合は、後者のメソッドをスケジュールするだけです。それ以外の場合は、セットアップを実行し、完了時に後者のメソッドをスケジュールします。

いくつかの擬似コード:

var refresh = false;
$(document).ready(function(e){
   $.ajax(URL).done( function(r) { 
       if(r) {
        routeOne();
       } else {
        latter();
       }
     });
});

function routeOne(){
  $.ajax(URL).done(function(r) { //do stuff
    latter();
  });
}
function latter(){
  //All other ajax calls
}

もう少し考えて、先にコーヒーを飲み干します...

編集:

更新された説明に基づいて、setInterval をスケジュールして、必要な時間間隔でチェック メソッド/ハッシュ更新を実行することが可能であり、サーバーの時間間隔は静的ですか、それとも可変ですか? Facebook はハートビートでこれを行います。私はこのタイプのロジックを Web アプリの「ロック」機能で使用しました。間隔を適切にスケジュールすると、他の ajax 呼び出しが中断されることはありません。

于 2013-07-06T16:17:14.880 に答える
1

$.ajax をオーバーライドして、指定したクエリ オプションを渡す前に「事前呼び出し」を行ってみてください。

var oldAjax = $.ajax;

$.ajax = function() {

  var args = arguments;

  oldAjax({
    type: "GET",
    url: "/echo/html/",
    success: function(result){
      // do something here to check result
      // if result is good, do the request:
      return oldAjax.apply($, args);
      // if its bad, handle the error
    }
  });

}

ここに実証するフィドルがあります:http://jsfiddle.net/NF76U/

于 2013-07-06T16:36:00.320 に答える