如何使用setInterval从ajax页面本身重复ajax调用?

时间:2011-05-11 17:25:27

标签: javascript ajax setinterval intervals ajax-request

我已将此保存为ajax.js文件:

function sendAjax(type, str)
{
var xmlhttp;
if (str=="")
  {
  document.getElementById("txtResp").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtResp").innerHTML=xmlhttp.responseText;
    }
  }


switch(type)
{
case 'search':
    xmlhttp.open('GET','mysql_process_search.php?q='+str,true); 
  break;
case 'add':
    xmlhttp.open("GET","mysql_process_event.php?q="+str,true); 
  break;
}

xmlhttp.send();
}

基本上,我试图使用内置的setInterval()函数来重复URL变量包含的任何内容。

从某种意义上说,我需要在执行sendAjax(type,str)函数后每隔5秒执行一次(如在writ中):

case 'add':
    xmlhttp.open("GET","mysql_process_event.php?q="+str,true); 
  break;
}

xmlhttp.send();

我可以设置我在一段时间内编写函数的位置:I.E。

setInterval( "sendAjax('message', '123')", 5000 );
sendAjax('message','123')

但是我的代码中有几个,几个地方,这个函数是写的,如果它包含在一个键操作和if语句中,它将不会工作,因为它只会执行一次:

$('#searchbar').live('keyup',function() {
    eInput = $(this).val();
    if (eInput.length > 1) {
    setInterval( "sendAjax('message', '123')", 5000 );
    sendAjax('message','123')
}
});

//此功能不起作用。

如果有人可以帮我修复最后一个函数,或者只是将setInterval包含在Ajax.js文件中,我将非常感激。

此致 泰勒

1 个答案:

答案 0 :(得分:1)

您可以使用jQuery更轻松地重写function sendAjax(type, str)(因为这似乎是您正在使用的内容:

function sendAjax(type, str, succ){  //where succ is the success callback

   if (str=="")
   {
        $("#txtResp").empty();
        return;
   }

   if(succ === undefined) {   succ = null;  }

   switch(type)
   {
   case 'search':
       $.ajax({type:"GET",
               url: "mysql_process_search.php",
               data: "q="+str,
               success: succ
       }); 
     break;
   case 'add':
       $.ajax({type:"GET",
               url: "mysql_process_event.php",
               data: "q="+str,
               success: succ
       }); 
     break;
   }

}

然后做:

$('#searchbar').live('keyup',function() {
    eInput = $(this).val();
    if (eInput.length > 1) {
       sendAjax('message','123', function(responseText){
             $("#txtResp").html(responseText);
             setInterval( function(){
                     sendAjax('message', '123', function(responseText){
                            $("#txtResp").html(responseText);
                     })
              }, 5000 );
       })
    }
});