-1

これは関数が非同期であることに関係があると思いますが、よくわかりません。簡単な答えだと思いますが、わかりません。

サーバーに画像が存在するかどうかを確認しようとしています。含まれている場合は、変数を設定します。そうでない場合は、次に進んで次の画像を確認してください。

私は0を取得し続けますが、変数にアラートを出すたびに、URLが正しくすべてが正しいことを知っています。どういうわけか、変数を取得できません。任意のヒント?

    $('.rightPostContent img').each(function(){
            var c = $(this).attr('src');
            var pot1 = c.replace('_B.png','_pt1.gif');
            var pot2 = c.replace('_B.png','_pt2.gif');
            var pot3 = c.replace('_B.png','_pt3.gif');


        $.get(pot3)
            .done(function() { 
                var t = 3;
            }).fail(function() { 
        })  
        $.get(pot2)
            .done(function() { 
                var t = 2;
            }).fail(function() { 
        })          
        $.get(pot1)
            .done(function() { 
                var t = 1;
            }).fail(function() { 
        })  
        alert(t);
    });

この例ではすべての画像が存在しますが、変数はt何も警告しません。pot

4

3 に答える 3

1

非同期であるため、機能を停止する$.get()ことはできません。したがって、その場合は、次のようなことを試すことができます。alert()done()fail()

$('.rightPostContent img').each(function(){
            var c = $(this).attr('src');
            var pot1 = c.replace('_B.png','_pt1.gif');
            var pot2 = c.replace('_B.png','_pt2.gif');
            var pot3 = c.replace('_B.png','_pt3.gif');

            var t = '';  // define variable t here

        $.get(pot3)
            .done(function() { 
                t = 3;
                alert_me();
            }).fail(function() { 
        })  
        $.get(pot2)
            .done(function() { 
                t = 2;
                alert_me();
            }).fail(function() { 
        })          
        $.get(pot1)
            .done(function() { 
                t = 1;
                alert_me();
            }).fail(function() { 
        });

        function alert_me() {
            alert(t);
        }
    });
于 2013-02-18T17:07:08.493 に答える
1

正確に...これは非同期呼び出しです...したがって、コントロールがalertステートメントに到達したとき、$.get() はサーバーまたはその他のソースからまだデータを受信して​​いません。

その設定値のを使用する必要がある場合は、これを渡す必要があるt場所に新しい関数を作成することをお勧めします。次に、またはコールバックtからその関数を呼び出します。done()fail()

function hereINeedTheT(t){
    //your code goes here.
}

$('.rightPostContent img').each(function(){
            var c = $(this).attr('src');
            var pot1 = c.replace('_B.png','_pt1.gif');
            var pot2 = c.replace('_B.png','_pt2.gif');
            var pot3 = c.replace('_B.png','_pt3.gif');


        $.get(pot3)
            .done(function() { 
                var t = 3;
                hereINeedTheT(t);
            }).fail(function() { 
        })  
        $.get(pot2)
            .done(function() { 
                var t = 2;
                hereINeedTheT(t);
            }).fail(function() { 
        })          
        $.get(pot1)
            .done(function() { 
                var t = 1;
                hereINeedTheT(t);
            }).fail(function() { 
        })  
    });
于 2013-02-18T17:10:46.323 に答える
0

jQueryで同期Ajax呼び出しを使用できます。次のようになります。

$.ajax({
        type: "GET",
        url: pot3,
        async: false,
        success: function(){var t = 3;},
        error: function(){}
    }
于 2013-02-18T17:10:41.357 に答える