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

标签 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 变量包含的任何内容。

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

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

问候, 泰勒

最佳答案

您可以使用 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 );
       })
    }
});

关于javascript - 如何使用 setInterval 从 ajax 页面本身重复 ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968160/

相关文章:

javascript - 尝试使用 filter() 从节点获取文本,但返回一个对象?

php - 通过 Jquery 在每个浏览器选项卡上实现相同的效果

php - 重新加载方法: Complete Ajax Solutions

javascript - 为什么我无法清除 setInterval?

javascript - JavaScript setInterval 相关问题

javascript - setInterval 中的关闭计数器

javascript - 在另一个事件上使用 JavaScript onchange 事件中捕获的数据?

javascript - Protractor-加载主页后无法定位元素

javascript - 如何在 Nest.js 中注入(inject)普通服务/提供者

php - 使用 Javascript 提交值