2011-01-06 48 views
0

我有一個函數來不斷地發送請求,但時間間隔需要根據我的函數返回而改變。 調用我在JSON變量CAS間隔中返回的腳本,並且需要更改此函數的區間變量。有人能告訴我如何做到這一點?如果事情沒有任何回報,那麼再次發送popžadavek。jquery ajax和函數內定義的setinterval

非常感謝

function dotaz(){ 
    //var cas 
    $.ajax({ 
    type: "GET", 
    url: "loader.php", 
    data: "promenna=1&promt=3&p="+Math.random(), 
    dataType: "json", 
    success: function(jdata){ 
     $("#loader").html(jdata.promenna); 
      if(jdata.chyba == 0){ 
      $("#loader").css({'background-color' : '#B90000'}); 
      } 
      if(jdata.chyba == 1){ 
      $("#loader").css({'background-color' : 'green'}); 
      } 
      var cas = jdata.cas*1000; 
    }, 
    error: function (xhr, ajaxOptions, thrownError){  
        if(xhr.status == 404) { 
        $("#loader").html("Soubor nenalezen"); 
        } 
        if(xhr.status == 400) { 
        $("#loader").html("Špatný požadavek"); 
        } 
        if(xhr.status == 403) { 
        $("#loader").html("Přístup zamítnut"); 
        } 
        if(xhr.status == 500) { 
        $("#loader").html("Chyba serveru"); 
        } 
    } 
    }); 
    setTimeout(function(){dotaz();}, 2000); 
    } 
    dotaz(); 

我需要

setTimeout(function(){dotaz();}, cas); 

回答

1

您試圖創建一個循環,並且在ajax返回之後,您希望在您的情況下有2000毫秒的超時時間。我會做這樣的:

function dotaz(cas){ 
    setTimeout(function(){ 
     $.ajax({ 
     type: "GET", 
     url: "loader.php", 
     data: "promenna=1&promt=3&p="+Math.random(), 
     dataType: "json", 
     success: function(jdata){ 
      $("#loader").html(jdata.promenna); 
       if(jdata.chyba == 0){ 
       $("#loader").css({'background-color' : '#B90000'}); 
       } 
       if(jdata.chyba == 1){ 
       $("#loader").css({'background-color' : 'green'}); 
       } 
       var new_cas = jdata.cas*1000; 
       dotaz(new_cas); 
     }, 
     error: function (xhr, ajaxOptions, thrownError){  
         if(xhr.status == 404) { 
         $("#loader").html("Soubor nenalezen"); 
         } 
         if(xhr.status == 400) { 
         $("#loader").html("Špatný požadavek"); 
         } 
         if(xhr.status == 403) { 
         $("#loader").html("Prístup zamítnut"); 
         } 
         if(xhr.status == 500) { 
         $("#loader").html("Chyba serveru"); 
         } 
         setTimeout(function(){dotaz();}, 5000); 
     } 
     }); 
     }, cas); 
    } 
    dotaz(1000) 

緊接時間了,你的要求去做

1

對不起,它的吧?

function dotaz(){ 
    //var cas; 
    $.ajax({ 
    type: "GET", 
    url: "loader.php", 
    data: "promenna=1&promt=3&p="+Math.random(), 
    dataType: "json", 
    success: function(jdata){ 
     $("#loader").html(jdata.promenna); 
      if(jdata.chyba == 0){ 
      $("#loader").css({'background-color' : '#B90000'}); 
      } 
      if(jdata.chyba == 1){ 
      $("#loader").css({'background-color' : 'green'}); 
      } 
      var cas = jdata.cas*1000; 
      setTimeout(function(){dotaz();}, cas); 
    }, 
    error: function (xhr, ajaxOptions, thrownError){  
        if(xhr.status == 404) { 
        $("#loader").html("Soubor nenalezen"); 
        } 
        if(xhr.status == 400) { 
        $("#loader").html("Špatný požadavek"); 
        } 
        if(xhr.status == 403) { 
        $("#loader").html("Přístup zamítnut"); 
        } 
        if(xhr.status == 500) { 
        $("#loader").html("Chyba serveru"); 
        } 
        setTimeout(function(){dotaz();}, 5000); 
    } 
    }); 
    } 
    dotaz() 
0

非常感謝你面前,看起來功能。 我只是想問,腳本等待響應的時間。假設我有一個腳本會執行50秒 - Sleep(50),並且Ajax將一直等待答覆的php文件,這個文件給了時間,重複多長時間。我仍然需要處理,什麼時候在一段時間內得到腳本的響應,可能需要30秒才能再次調用函數,並在某處寫入popřípadně超時錯誤。

代碼:

<script> 
    function dotaz(idecko,cas){ 
    setTimeout(function(){ 
    $.ajax({ 
    type: "GET", 
    url: "loader.php", 
    data: "promenna="+idecko+"&promt=3&p="+Math.random(), 
    dataType: "json", 
    success: function(jdata){ 
     $("#hlavicka"+idecko).html(jdata.promenna); 
     $("#blok"+idecko).html(jdata.data); 
     if(jdata.stav == 0) { $("#box"+idecko).removeClass('err war').addClass('rdy'); } 
     if(jdata.stav == 1) { $("#box"+idecko).removeClass('err rdy').addClass('war'); } 
     if(jdata.stav == 2) { $("#box"+idecko).removeClass('rdy war').addClass('err'); } 

     var new_cas = jdata.cas*1000; 
     dotaz(idecko,new_cas); 
    }, 
    error: function (xhr, ajaxOptions, thrownError){ 

        if(xhr.status == 404) { 
        $("#paticka"+idecko).html("Soubor nenalezen"); 
        } 
        if(xhr.status == 400) { 
        $("#paticka"+idecko).html("Špatný požadavek"); 
        } 
        if(xhr.status == 403) { 
        $("#paticka"+idecko).html("Přístup zamítnut"); 
        } 
        if(xhr.status == 500) { 
        $("#paticka"+idecko).html("Chyba serveru"); 
        }     
        setTimeout(function(){dotaz(idecko);}, cas); 
    } 
    }); 
    }, cas); 


     $('#info'+idecko).hover(
      function() { 
      $('#udalost'+idecko).css({'display' : 'block'}); 
      }, 
      function() { 
      $('#udalost'+idecko).css({'display' : 'none'}); 
      } 
     ); 

    } 

    </script> 

,並調用這個腳本:

<script>dotaz(2,0);</script> 

2是DIV ID 2和0到第一超時設置爲0,馬上行動吧。