2013-04-09 53 views
1

我有一个与php进行通信以接收来自twitter帐户的推文的ajax。代码工作正常。 唯一的问题是我想让ajax间歇性地调用php,以便任何更新后的tweets自动回来并打印到我的页面,而不必刷新或重新输入twitter id。 我需要继续调用getStatuses()函数吗? 或者我需要使用getUpdates(),我已经开始做些什么? 这里是我的ajax功能:如何获得ajax间歇性地调用我的php?

// the setInterval function added in the getStatusesX function 
function getStatusesX() 
{ 
setInterval(getStatuses(),300000); 
} 

    //Create a cross-browser XMLHttp Request object 
function getXMLHttp() { 

    var xmlhttp; 
    if (window.ActiveXObject) { 
     XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else if (window.XMLHttpRequest) { 
     XMLHttp = new XMLHttpRequest(); 
    } else { 
     alert("Your browser does not support XMLHTTP!"); 
    } 
    return XMLHttp; 
} 

//function that searches for the tweets via php 
function getStatuses(){ 

     XMLHttp1 = getXMLHttp(); 
     var userID = document.getElementById("userid").value; 

     //ajax call to a php file that will extract the tweets 
     XMLHttp1.open('GET', 'twitterTest2.php?userid='+userID, true); 

     // Process the data when the ajax object changes its state 
     XMLHttp1.onreadystatechange = function() { 
     if(XMLHttp1.readyState == 4) { 
      if(XMLHttp1.status ==200) { //no problem has been detected 

     document.getElementById("tweetbox").innerHTML=XMLHttp1.responseText; 

      } 
     } 
     } 
     XMLHttp1.send(null); 
} 

//function to intermittently call php to check for updated tweets? 
function updateInfo() { 
    if(XMLHttp1.readyState == 4) { 

     document.getElementById("tweetbox").innerHTML=XMLHttp1.responseText; 

    } 
} 

</script> 

我接着又说了getStatusesX()函数来我的格式如下:

<form> 
Input Twitter ID: <input type="text" name="userid" id="userid"> 
<button type="button" onClick="getStatusesX()";>Get recent tweets</button> 
</form> 

它仍然没有工作。我用错误的方式使用setInterval?

回答

3

使用setTimeoutsetInterval函数。

从我在代码中可以看到的情况来看,getStatuses负责过多,因为除了获取数据外,它还修改了DOM

我建议是这样的:

function getStatuses(callback) { 
    //... 
    XMLHttp1.onreadystatechange = function() { 
     //... 
     callback && callback(XMLHttp1); //execute callback if any 
    }; 
} 

function updateStatuses(callback) { 
    getStatuses(function (xhr) { 
     document.getElementById("tweetbox").innerHTML = xhr.responseText; 
     callback && callback; 
    }); 
} 

//this function update the statuses and as soon as it's finished, it sets 
//a timeout to redo the process in ~10 seconds. 
function startUpdatingStatuses() { 

    updateStatuses(function() { 
     setTimeout(startUpdatingStatuses, 10000); 
    }); 
} 

startUpdatingStatuses(); //kick-start everything 
+0

只是增加了一个setInterval函数,没有看到完整的答复。我现在就看看它。 – user1835504 2013-04-09 23:34:47

+0

'callback && callback'是做什么的? – user1835504 2013-04-09 23:36:35

+0

感谢它的帮助,我会接受它。对不起,我不是很擅长编码,只是学习。发现难以遵循你的建议。我试图实现它,但它没有奏效。 – user1835504 2013-04-10 00:14:31