Javascript jquery变量未在function.asynchronous中设置?

Javascript jquery变量未在function.asynchronous中设置?,javascript,jquery,Javascript,Jquery,我认为这与函数是异步的有关,但我不确定。我想这是一个很快的答案,但我想不出来 我正在尝试检查服务器上是否存在图像。如果有,则设置一个变量。如果没有,请继续查看下一张图片 每次我警告变量时,尽管我总是得到0。我知道网址是正确的,一切都好。由于某种原因,尽管我无法获取变量。有什么建议吗 $('.rightPostContent img').each(function(){ var c = $(this).attr('src'); var pot

我认为这与函数是异步的有关,但我不确定。我想这是一个很快的答案,但我想不出来

我正在尝试检查服务器上是否存在图像。如果有,则设置一个变量。如果没有,请继续查看下一张图片

每次我警告变量时,尽管我总是得到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
图像。

作为
$。get()
是异步的,因此您无法从
fail()
函数的
done()
中获取
警报()。因此,在这种情况下,您可以尝试以下方法:

$('.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);
        }
    });

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

$.ajax({
        type: "GET",
        url: pot3,
        async: false,
        success: function(){var t = 3;},
        error: function(){}
    }
正是。。。 这是异步调用。。。因此,当控件到达
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() { 
        })  
    });

你能给我们看一下你的HTML代码吗?这样我们就可以理解它的结构[
选择器[/code>]它只是一个大容器中带有
\u B.png
的图像,我想检查服务器上是否存在三个相关的gif(
\u pt1.gif
\u pt2.gif
\u pt3.gif
),试试这个方法
$(.rightPostContent>img'))
但我只是想设置
t
变量。我该怎么做?因此我必须从
$.get()
范围内调用另一个函数?是,并在
$.get()范围外定义
t
。我希望这能解决您的问题。我可以指定
t
为全局变量,以便在整个jquery过程中在其他函数中使用它吗?我可以将
t
设置为全局变量,以便在其他jquery函数中使用它吗?可以,但我不鼓励您使用全局变量。相反,您可以通过success回调来调用
其他jquery函数。同样,使用全局变量没有任何问题,但这不是一个复杂的编程实践,您应该将其作为最后一个选项使用:)