2011-12-10 10 views
4

各要素がループされたときに新しいページにリダイレクトするような機能を開始するにはどうすればよいですか? これは私の現在のコードです:あなたはこのような何かをしようとする必要がありますので、jQueryが完了すると、トリガー機能

$('#tabCurrentFriends > .dragFriend').each(function(){ 
    var friendId = $(this).data('rowid'); 
    $.ajax({ 
     type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid, 
     complete: function(data){ 
     } 
    }); 
}); 
+0

それは*ルーピング*をやったりAJAX要求を行う行うの? –

+0

.each関数のループが終了したときに、6つの要素があり、6つの要素が 'ajaxed'されているときには、それが何かをします。 – Flaashing

+0

ループはほとんど瞬間的に終了します。 ajaxリクエストは時間がかかりますが、応答を待つ必要があります。応答が受信されると、完全な機能が実行されます。 「非同期」という用語を学ぶ - http://en.wikipedia.org/wiki/Ajax_(programming) – Vigrond

答えて

12

あなたはすべてのAJAX後にユーザーをリダイレクトする$.when()/$.then()を使用することができます要求が行われています。

//create array to hold deferred objects 
var XHRs = []; 
$('#tabCurrentFriends > .dragFriend').each(function(){ 
    var friendId = $(this).data('rowid'); 

    //push a deferred object onto the `XHRs` array 
    XHRs.push($.ajax({ 
     type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid, 
     complete: function(data){ 
     } 
    })); 
}); 

//run a function when all deferred objects resolve 
$.when(XHRs).then(function(){ 
    window.location = 'http://stackoverflow.com/'; 
}); 

編集からを使用するために配列、applyと210を使用する必要があります

$.when.apply(null, XHRs).then(function() { 
    window.location = 'http://stackoverflow.com/'; 
}); 

jQueryのAJAXリクエストは、彼らの完全な機能火災解決defferedオブジェクトを作成します。このコードは、これらの定義されたオブジェクトを配列に格納し、それらがすべて解決されたときに.then()内の関数が実行されます。

ドキュメント:

+0

XHR変数は何をするのですか? – Flaashing

+0

@Flaashing AJAX呼び出しが終了したときに解決される、遅延オブジェクトの配列です。 '$ .when()'は、すべての遅延オブジェクトがXHR配列で解決するのを待ちます(すべてのAJAX呼び出しが終了したことを意味します)。 '.then()'で関数を実行します。 – Jasper

+0

は、非常にinterresting、migthと同様にそれを見て、感謝の音: – Flaashing

5

AJAXは、非同期的に起こる:

var total = $('#tabCurrentFriends > .dragFriend').length; 
var completed = 0; 

$('#tabCurrentFriends > .dragFriend').each(function(){ 
    var friendId = $(this).data('rowid'); 
     $.ajax({ 
      type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid, 
      complete: function(data){ 
       completed++; 

       if (completed == total) { 
       // All have been loaded. 
       } 
     } 
    }); 
}); 
関連する問題