1

我已将其保存为 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 变量包含的任何内容。

从某种意义上说,我需要在调用 tfunction sendAjax(type,str) 后每 5 秒执行一次(如书面形式):

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

xmlhttp.send();

我可以设置我在间隔上编写函数的位置:IE

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 文件本身中,我将不胜感激。

问候,泰勒

4

1 回答 1

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 );
       })
    }
});
于 2011-05-11T17:30:03.510 回答