-1

我认为这与异步功能有关,但我不确定。我认为这是一个快速的答案,但我无法弄清楚。

我正在尝试检查服务器上是否存在图像。如果他们这样做,那么设置一个变量。如果他们不这样做,请继续检查下一张图片。

每次我提醒变量虽然我一直得到 0。我知道网址是正确的,一切。出于某种原因,虽然我无法获得变量。有小费吗?

    $('.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 回答