jquery变量没有在function.asynchronous中设置?
我认为这与功能异步,但我不知道。我认为这是一个快速的答案,但我无法弄清楚。jquery变量没有在function.asynchronous中设置?
我试图检查服务器上是否存在图像。如果他们这样做,然后设置一个变量。如果他们不这样做,然后检查下一张图像。
每次我都提醒变量,尽管我一直得到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
图像。
没错... 这是异步调用...所以,当控件达到您的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() {
})
});
我可以让我的't'成为一个全局变量,因此我可以在其他jquery函数中使用它吗? – patricko 2013-02-18 17:23:12
是的,你可以,但我不鼓励你使用全局变量。取而代之的是,您可以从成功回调中调用“其他jquery函数”。 再一次,没有与全局变量扭曲,但这不是一个复杂的编程习惯,你应该使用它作为最后的选择.. :) – AdityaParab 2013-02-18 17:27:51
由于$.get()
是异步的,所以你不能得到alert()
出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);
}
});
但我只是想设置't '变量。我怎么做? – patricko 2013-02-18 17:07:42
@patricko请参阅我的更新 – thecodeparadox 2013-02-18 17:09:19
,所以我必须从'$ .get()'内调用另一个函数? – patricko 2013-02-18 17:09:49
您可以使用jQuery的同步Ajax调用,这样的事情:
$.ajax({
type: "GET",
url: pot3,
async: false,
success: function(){var t = 3;},
error: function(){}
}
你能告诉我们你的HTML代码,以便我们可以理解结构['selector'] – asifsid88 2013-02-18 17:07:25
它与'_B.png'仅有1个图像中的大容器中,我要检查,如果三个相关的GIF( '_pt1.gif','_pt2.gif'和'_pt3.gif')存在于服务器上 – patricko 2013-02-18 17:08:44
试试这种方式'$('。rightPostContent> img')' – asifsid88 2013-02-18 17:09:50