2013-02-18 3 views
-1

Я думаю, что у этого есть что-то, чтобы функция была асинхронной, но я не уверен. Я думаю, что это быстрый ответ, но я не могу понять.переменная jquery не устанавливается внутри функции. Асинхронно?

Я пытаюсь проверить, существуют ли изображения на сервере. если они это сделают, то установите переменную. если они не будут затем двигаться дальше и проверить следующее изображение.

каждый раз, когда я предупреждаю переменную, хотя я продолжаю получать 0. Я знаю, что URL-адреса верны и все. по какой-то причине, хотя я не могу получить переменную. какие-нибудь советы?

$('.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

+0

это просто 1 изображение с' _B.png' в большом контейнере, и я хочу, чтобы проверить, если три связанных гифы ('_pt1.gif',' _pt2.gif' и '_pt3.gif') существуют на сервере – patricko

+0

Попробуйте этот способ' $ ('. rightPostContent> img') ' – asifsid88

ответ

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

+0

да, но я бы не рекомендовал использовать глобальные переменные. Вместо этого найдите какой-то способ, вы можете вызвать «другие функции jquery» из своего обратного вызова. Опять же, ничего не сжимается с глобальной переменной, но это не сложная практика программирования, и вы должны использовать ее как последний вариант. :) – AdityaParab

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

, но я просто пытаюсь установить' t 'переменная. Как мне это сделать? – patricko

+0

@patricko, пожалуйста, см. Мое обновление – thecodeparadox

+0

, поэтому мне нужно вызвать другую функцию из '$ .get()'? – patricko

0

Вы можете использовать синхронный вызов Ajax в JQuery, что-то вроде этого:

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