我认为这与异步函数有关,但我不确定。我认为这是一个快速的答案,但我无法弄清楚。
我正在尝试检查服务器上是否存在图像。如果他们这样做,那么设置一个变量。如果他们不这样做,那么继续检查下一张图片。
每次我警告变量虽然我一直都是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
图像。
答案 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(){}
}