Как использовать setInterval для повторения вызовов ajax с самой страницы ajax? - PullRequest
2 голосов
/ 11 мая 2011

Я сохранил это как файл 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.

В каком-то смысле мне нужно, чтобы это выполнялось каждые 5 секунд после вызова функции sendAjax (type, str) (как в write):

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, я был бы очень признателен.

С уважением, Taylor

1 Ответ

1 голос
/ 11 мая 2011

Вы можете переписать это function sendAjax(type, str) намного проще с помощью jQuery (поскольку, похоже, вы используете:

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