2009-11-06 3 views
0

У меня проблема, я не могу найти способ обойти ее.проблема с загрузкой изображений на setTimeout

Проблема заключается в том, что я загружаю изображения и некоторый текст через ajax-вызов, а затем через некоторое время снова пытаюсь вызвать функцию ajax, чтобы получить новый набор изображений и текста. Однако моя проблема заключается в том, что изображения не загружаются вовремя (все в порядке с текстовой загрузкой), они как бы прекращают загрузку, а затем следующий вызов ajax.

Есть ли способ обойти эту проблему?

Я был бы очень признателен за помощь от кого-то.

EDIT: Кажется, что setTimeout ("", 30000); работая с разной скоростью на firefox и IE. Есть ли способ, чтобы установить его на минуту, я попытался поставить его 60000, но получил те же результаты в плане того, как проходит время, пока он не звонит АЯКС ...

Вот мой код:

HTML

<asp:Panel ID="portfolio" runat="server" style="border:solid 1px black; height:300px; width:400px; display:none;"> 
     <div id="div_before"> 
      <img id="img_before" alt="" height="200" width="100" /> 
      <span id="txt_before"></span> 
     </div> 
     <div id="div_after"> 
      <img id="img_after" alt="" height="200" width="100" /> 
      <span id="txt_after"></span> 
     </div> 
    </asp:Panel> 

И мой JavaScript:

function getPortfolio() { 
      $.ajax({ 
       type: "POST", 
       url: "Portfolio.aspx/GetImages", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(msg) { 
        onCallBack(msg); 
       } 
      }); 
     } 


     function onCallBack(msg) { 
      var result = msg.d; 
      if (result != null) { 
       var portfolio_div = $("div[id*='portfolio']"); 

       $(portfolio_div).css({ 'display': 'block' }); 

       var imgs = $(portfolio_div).find("img"); 

       $("#img_before").attr({ src: "images/" + result.img_before.toString() }); 
       $("#img_after").attr({ src: "images/" + result.img_after.toString() }); 

       var txts = $(portfolio_div).find("span"); 

       $(txts[0]).text(result.txt_before); 
       $(txts[1]).text(result.txt_after); 

       setTimeout("", 30000); 
       getPortfolio(); 
      } 
      else { 
       $(portfolio_div).css({ 'display': 'none' }); 
      } 
     } 

ответ

2

Я не уверен, что вы пытаетесь сделать - это выглядит, как вы ожидаете SetTimeout TYO быть синхронным (например, блокировать выполнение JS.).

Вы уверены, что вы не хотите

setTimeout(getPortfolio, ...) 

И вы действительно должны использовать image.onload если вы ждете нагрузок, чтобы закончить ...

+0

Ваш совет относительно $ ("# img_after"). Load (function() действительно помог. Однако setTimeout (getPortfolio, ...) не помог мне (в начале что у меня было). – Dmitris

0

Это должно быть

SetTimeout ('getPortfolio()', ...)

вместо

SetTimeout (getPortfolio(), ...)

если код такой же, как и выше, метод getPortfolio() будет вызываться только один раз (а не в каждом интервале). Он немедленно будет вызван на установку увольнения.