0

フォトギャラリーの場合、表示したい画像の src の配列を返すファイルを (ajax 経由で) ロードします。これらは、ajax 呼び出しが返す正確な順序で表示する必要があります。

内部に関数を含む for ループを使用してい.load()ますが、その方法では同期されません。関数内で i の値を出力すると、0、1、3、4.load()などではなく、0、3、2、4 などになります。

私のコードの簡略版:

$.get('photostack.php', {album_name:album_name} , function(data) {
var items_count = data.length;
for(var i = 0; i < items_count; ++i){
    var item_source = data[i];
    var cnt = 0;
    $('<img />').load(function(){
        var $image = $(this);
        ++cnt;
        console.log(i);
        $ps_container.append($image);
    }).attr('src',item_source).attr('class',i);
}
},'json');

console.log(i)間違った順序を与えるようになりました。完全に上昇している必要があります。

私は多くのことを試しました。cnt/などの変数としてオブジェクトを使用して、すべてのロードを100ミリ秒遅らせますiが、どれも機能しませんでした。

4

2 に答える 2

2

これは、の非同期の性質によるものです.load。コールバック関数がいつ呼び出されるかは予測できません。それらを同期するには、Deferred オブジェクトを使用します

于 2012-04-29T12:41:01.907 に答える
0

本当に理解できるかどうかはわかりませんが、次のようなものがうまくいくかもしれません:

$.get('photostack.php', {album_name:album_name} , function(data) {
    for(var i = 0; i < data.length; i++){
        var image = new Image();
            image.src = data[i];
            image.className = i;
            image.style.display = 'none';
        $(image).appendTo($ps_container).load(function() {
            $(this).show();
        });
    }
},'json');​
于 2012-04-29T13:21:25.740 に答える