2013-02-18 59 views
-1

我認爲這與功能異步,但我不知道。我認爲這是一個快速的答案,但我無法弄清楚。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

回答

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() { 
     }) 
    }); 
+0

我可以讓我的't'成爲一個全局變量,因此我可以在其他jquery函數中使用它嗎? – patricko 2013-02-18 17:23:12

+0

是的,你可以,但我不鼓勵你使用全局變量。取而代之的是,您可以從成功回調中調用「其他jquery函數」。 再一次,沒有與全局變量扭曲,但這不是一個複雜的編程習慣,你應該使用它作爲最後的選擇.. :) – AdityaParab 2013-02-18 17:27:51

1

由於$.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

0

您可以使用jQuery的同步Ajax調用,這樣的事情:

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