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

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图像。

+0

你能告诉我们你的HTML代码,以便我们可以理解结构['selector'] – asifsid88 2013-02-18 17:07:25

+0

它与'_B.png'仅有1个图像中的大容器中,我要检查,如果三个相关的GIF( '_pt1.gif','_pt2.gif'和'_pt3.gif')存在于服务器上 – patricko 2013-02-18 17:08:44

+0

试试这种方式'$('。rightPostContent> img')' – asifsid88 2013-02-18 17:09:50

没错... 这是异步调用...所以,当控件达到您的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() { 
     }) 
    }); 
+0

我可以让我的't'成为一个全局变量,因此我可以在其他jquery函数中使用它吗? – patricko 2013-02-18 17:23:12

+0

是的,你可以,但我不鼓励你使用全局变量。取而代之的是,您可以从成功回调中调用“其他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); 
     } 
    }); 
+0

但我只是想设置't '变量。我怎么做? – patricko 2013-02-18 17:07:42

+0

@patricko请参阅我的更新 – thecodeparadox 2013-02-18 17:09:19

+0

,所以我必须从'$ .get()'内调用另一个函数? – patricko 2013-02-18 17:09:49

您可以使用jQuery的同步Ajax调用,这样的事情:

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