2011-01-06 11 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秒かかり、どこかにタイムアウトエラーを書きます。

コード:

<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はすぐにそれを行うには0に最初のタイムアウトを設定するのdivのid 2と0のためです。

関連する問題