2012-03-06 1 views
0

У меня есть страница Jquery + Ajax, которая подключается к серверу, получает некоторые данные и отображает их. Это делается все время, функция вызывает себя после завершения всей задачи и начинает выполнять снова и снова. Но если компьютер потеряет интернет-соединение, все останавливается. И когда соединения снова возвращаются, ничего не происходит. Вот код javascript. Как я могу настроить его, чтобы он продолжал работать после того, как соединение снова вернулось.javascript не подключается к серверу, если соединение потеряно

$(document).ready(function() { 
var a=1; 
var max='23'; 

function kiosk() 
{ 
    if(a<max) 
    { 
     $.post('engine.php', { index: a }, 
     function(result) 
     { 
      result = jQuery.parseJSON(result); 

      $('#main').css({'display':'none'}); 


      $('#div_city').html(result.dest); 
      $('#div_price').html(result.price); 
      $('#div_price_pre').html('From&nbsp;'); 
      $('#div_price_after').html('&nbsp;Euro'); 

       $('#main').fadeIn(2000).delay(3000).fadeOut(2000, function() 
        { 

          $('#main').hide; 
          a++; 
          kiosk(); 


        }); 

     }); 
    } 
    else 
    { 
     a=1; 
     kiosk(); 
    } 

} 
kiosk(); 
}); 

ответ

3

Я хотел бы предложить, а не с помощью $ .post вы используете

$ .ajax ({типа: "пост", успех: function1(), отказ: function2()}.

В function2 (..), вы можете вызвать koisk снова после тайм-аута и succces будет функция, которую вы создали прямо сейчас

Эта ссылка поможет вам понять функцию АЯКС jQuery Ajax error handling, show custom exception messages

Например фрагмент кода:

function kiosk() 
{ 
if(a<max) 
{ 
    $.ajax({type : "POST" , url : 'engine.php',data: { index: a }, 
    success : function(result) 
    { 
     result = jQuery.parseJSON(result); 

     $('#main').css({'display':'none'}); 


     $('#div_city').html(result.dest); 
     $('#div_price').html(result.price); 
     $('#div_price_pre').html('From&nbsp;'); 
     $('#div_price_after').html('&nbsp;Euro'); 

      $('#main').fadeIn(2000).delay(3000).fadeOut(2000, function() 
       { 

         $('#main').hide; 
         a++; 
         kiosk(); 


       }); 

    },error : function (xhr, ajaxOptions, thrownError){ setTimeout(200,kiosk()) } 

    }); 
} 
else 
{ 
    a=1; 
    kiosk(); 
} 

} kiosk(); }); `

+0

Я думаю, что это правильно, но я получаю синтаксическую ошибку – David

+0

была моей ошибкой. все работает. Благодаря!!! – David

-1

Сценарий брови, потому что я думаю, что это исключение. Вы можете добавить свой код try и catch block, и даже если есть ошибки, вы можете продолжить попытки.

try { 
    result = jQuery.parseJSON(result); 
    // do your work 
} catch { 
    // call function again 
} 

Или вы можете использовать jquery ajax, у него есть событие onerror.

0

Используя jQuery.post, вы проходите обратный вызов, который выполняется только при успешном выполнении. Вы должны использовать jQuery.ajax, который имеет разные обратные вызовы. См. documentation с complete, success и error обратные вызовы.

Вы также можете использовать statusCode для сопоставления определенного кода HTTP с пользовательской функцией.

Смежные вопросы