2011-12-25 17 views
3

AJAXクエリのさまざまな段階(beforeSend、success、failure、complete)で& DOM要素を操作するAjaxクエリがいくつかあります。他の人がまだ処理している間に複数のクエリが実行される可能性があります。正しいクエリのイベントをトリガするために、各クエリのDOM要素を特定する方法が不思議です。Jquery .ajax():ユニークなAJAXクエリ識別子?

したがって、jQuery .ajaxはそれぞれのDOM要素のIDを解析できるユニークなクエリ識別子にアクセスできますか?

$.ajax({ 
    UNIQUE_ID_NEEDED_HERE = ??? # Need to get unique identifier for this AJAX query 
    url: '/my/query', 
    data: my_data, 
    dataType: "json", 
    beforeSend: function (response) { 
     $('#ajax_messages').append('<div class="loadingStatus" id="' + UNIQUE_ID_NEEDED_HERE + '">Re-ordering tasks</div>'); 
    }, 
    success: (message, text, response) { 
     $(UNIQUE_ID_NEEDED_HERE).attr('class', 'successfulStatus'); 
     $(UNIQUE_ID_NEEDED_HERE).html('Tasks re-ordered'); 
    } 
}); 

そうでない場合は、いずれかの代替案が高く評価されます。

答えて

4

あなたはこれを試しましたか?

var constructRequest = (function() { 
     var startNumber = 0; 
     return function() { 
      var local = "request_id_"+(++startNumber); 
      $.ajax({ 
       url: "someurl.php", 
       cache: false, 
       success: function(html){ 
       /** 
       * Every time on success callback 
       * you will have unique local variable 
       * like this: 
       * request_id_1, request_id_2, request_id_3 
       * and so on. 
       ***/ 
       alert(local); 
       } 
      }); 
     } 
    })(); 

    $(document).ready(function() { 
      constructRequest(); 
      constructRequest(); 
    }); 
1

私はあなたの目的を理解すれば、実際にこれを行う必要はありません。あなたがする必要があるのは、標準的な "loading ..." divテンプレートを作成し、それを複製することだけです。クローンを変数に格納して、ドキュメントの適切な場所に書き込んでください。 AJAXの成功メソッドが起動すると、作成されたスコープ内でそのメソッドが実行され、同じクローンにアクセスでき、必要なメソッドを呼び出すことができます。

0

あなたがしようとしました:

function doAjaxMagic(idOfEl){ 
$.ajax 
      url: '/my/query' 
      data: my_data 
      dataType: "json" 
      beforeSend: (response) -> 
      $('#ajax_messages').append('<div class="loadingStatus" id="' + idOfEl + '">Re-ordering tasks</div>') 

      success: (message, text, response) -> 
      $("#"+idOfEl).attr('class', 'successfulStatus') 
      $("#"+idOfEl).html('Tasks re-ordered') 


} 

それが動作しない理由はありますか?

+0

アイデアのおかげで、残念なことにかなりです。特定のコマンドは同じ要素(例えばソート可能なドラッグ・ドロップ・リストが並べ替えられているなど)から起動できるため、起動された要素だけでなく、クエリを識別する必要があります。 (編集:それは、私はタイムスタンプを投げることができると思うが、同時のものの理論上のリスクがある。) – PlankTon

0

一意の識別子として乱数を使用すると、識別子を複製する確率が大幅に低下します。

関連する問題