jquery变量没有在function.asynchronous中设置?

时间:2013-02-18 17:05:53

标签: javascript jquery

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

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

每次我警告变量虽然我一直都是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图像。

3 个答案:

答案 0 :(得分: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);
        }
    });

答案 1 :(得分: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() { 
        })  
    });

答案 2 :(得分:0)

您可以在jQuery中使用同步Ajax调用,如下所示:

$.ajax({
        type: "GET",
        url: pot3,
        async: false,
        success: function(){var t = 3;},
        error: function(){}
    }