2011-08-09 13 views
1

私はjgetを.eachループの中に.getを入れています。私はループ内のすべての取得が完了するまで待ちます(それぞれが新しい要素を配列に挿入します)。そして、作成された配列を保存するためにphpファイルにajax post要求を行います。私は、それぞれが終了するまで、どのようにしてAjaxリクエストを待つことができるのか分かりません。これまではアヤックスが非常に速く発砲していたため、アガックスはまだ空になっていました。多分あなたはアイディアを持っています。ここgetを終了するまでそれぞれajaxを待ちます。

スクリプトである:

$('#ScanButton, .ScanButton').click(function() { 

var array = ["http://www.xyz.com/bla/bla/summary.html", 
      "http://www.xyz.com/blu/blu/summary.html", 
      ]; 

dataArray = []; 

$.each(array, function(n, val) { 


    $.get(val, function(res) { //get the html source of this website 



     var data = { 

     } 

    }).complete(function() { 
     alert("complete"); 
     dataArray.push(data); 
    }); 

}); 

    data = YAHOO.lang.JSON.stringify(dataArray);  

    $.ajax({ 
    async:   false, 
    type:   'post', 
    cache:   false, 
    url:   'test.php', 
    data:   {myJson: data} 
    }); 

    return false; 

})。

何か助けていただきありがとうございます。ありがとうございました:)

+0

に.get()関数は、この影響を受けているアヤックスの速記機能()、であるとして「同一生成元ポリシーは、」問題になるだろう。この詳細については、http://en.wikipedia.org/wiki/Same_origin_policyを参照してください。希望が役立ちます。 –

+0

私は、同じ発信元ポリシーの概念に精通しています。ありがとうございました:)私は(それは単なる民間のプロジェクトのために)うまくいく回避策を得ました。しかし、今まで各ループの後にajax投稿要求が発生します。これらの要求を最小限に抑えたいこれはループが終了し、配列が引き渡されるのが完了した後に、最後のajaxポストリクエストを起動する必要がある理由です。 – Sebsemillia

答えて

1

Underscore.jsにはelegant solution to this sort of problemがあります。

var renderNotes = _.after(notes.length, render); 
_.each(notes, function(note) { 
    note.asyncSave({success: renderNotes}); 
}); 
// renderNotes is run once, after all notes have saved. 
関連する問題