jquery ajax和setinterval在函数内定义

时间:2011-01-06 14:20:26

标签: jquery

我有一个不断发送请求的功能,但是时间间隔需要根据我的函数返回而改变。 调用脚本,我在JSON变量cas间隔中以秒为单位返回,并且需要更改此函数的间隔变量。有人可以告诉我怎么做吗?如果事情没有返回任何东西,那么再次发送popžadavek。

非常感谢

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);

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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)

在您提出请求之前暂停一下

答案 2 :(得分:0)

非常感谢,它看起来很实用。 我只是想问一下,脚本等待响应的时间有多长。假设我有一个执行50s的脚本 - 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以立即执行。