Javascript jquery变量未在function.asynchronous中设置?
我认为这与函数是异步的有关,但我不确定。我想这是一个很快的答案,但我想不出来 我正在尝试检查服务器上是否存在图像。如果有,则设置一个变量。如果没有,请继续查看下一张图片 每次我警告变量时,尽管我总是得到0。我知道网址是正确的,一切都好。由于某种原因,尽管我无法获取变量。有什么建议吗Javascript jquery变量未在function.asynchronous中设置?,javascript,jquery,Javascript,Jquery,我认为这与函数是异步的有关,但我不确定。我想这是一个很快的答案,但我想不出来 我正在尝试检查服务器上是否存在图像。如果有,则设置一个变量。如果没有,请继续查看下一张图片 每次我警告变量时,尽管我总是得到0。我知道网址是正确的,一切都好。由于某种原因,尽管我无法获取变量。有什么建议吗 $('.rightPostContent img').each(function(){ var c = $(this).attr('src'); var pot
$('.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函数。同样,使用全局变量没有任何问题,但这不是一个复杂的编程实践,您应该将其作为最后一个选项使用:)