简体   繁体   中英

how do i refresh a php script every ten seconds?

I need to refresh a php script every ten seconds, it is for a update system, It looks for any new updates and then returns a value to javascript/php and then in displays them to the user in a div?

Is this the best way, if not what is?

i'm open to all comments.

Thanks in advance.

set up your AJAX call to the php script within a JS function, and the last line of the function should be setTimeout(functionname, 10000);

oh, and, you'll need to call the function the first time somewhere, then it will continue to run...so:

<html><head>
<script>
function update(){
//your ajax here
setTimeout(update,10000);
}
update();
</script></head>
<body><div id="theDivToUpdate"></div></body></html>

Here's some sample code to show you how you could pass JSON or XML and have the HTML page handle it. Here's the PHP (here the data is just hardcoded, but in your case you'd dynamically populate):

<?php
$format=$_REQUEST['format'];
if($format=="json"){
    header('Content-type: application/json');
    header('Cache-Control: no-cache, must-revalidate');
    echo "{\"status\":\"ok\",\"results\":[{\"first\":\"MyFirst\",\"last\":\"MyLast\",\"company\":\"Big Company\"},{\"first\":\"YourFirst\",\"last\":\"YourLast\",\"company\":\"Another Company\"},{\"first\":\"John\",\"last\":\"Doe\",\"company\":\"What Company?\"},{\"first\":\"Jane\",\"last\":\"Doe\",\"company\":\"Stackoverflow\"}]}";
}
else if($format=="xml"){
    header("Content-type: text/xml");
    header('Cache-Control: no-cache, must-revalidate');
    echo "<ROOT><STATUS>ok</STATUS><RESULTS><RESULT><FIRST>MyFirst</FIRST><LAST>MyLast</LAST><COMPANY>Big Company</COMPANY></RESULT><RESULT><FIRST>YourFirst</FIRST><LAST>YourLast</LAST><COMPANY>Another Company</COMPANY></RESULT><RESULT><FIRST>John</FIRST><LAST>Doe</LAST><COMPANY>What Company?</COMPANY></RESULT><RESULT><FIRST>Jane</FIRST><LAST>Doe</LAST><COMPANY>Stackoverflow</COMPANY></RESULT></RESULTS></ROOT>";
    }

else{
    echo "You need to supply the \'format\' parameter (json or xml)";
}
?>

and then here is a sample html page:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>

function getJSON(){
        var xmlhttp;
        xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
        xmlhttp.onreadystatechange=function()
        {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                var res=xmlhttp.responseText; //THE JSON STRING IS TEXT
                res=JSON.parse(res);  //THIS CONVERTS THE JSON INTO OBJECTS THAT CAN BE ACCESSED WITH DOT NOTATION
                if(res.status=="ok"){
                    newtable="<table><tr><th>First</th><th>Last</th><th>Company</th></tr>";
                    for(i=0;i<res.results.length;i++){
                        newtable+="<tr><td>"+res.results[i].first+"</td><td>"+res.results[i].last+"</td><td>"+res.results[i].company+"</td></tr>";
                    }
                    newtable+="</table>";
                    document.getElementById('resultDiv').innerHTML=newtable;
                }
            }
        }
        xmlhttp.open("GET","thePHPFile.php?format=json",true);
        xmlhttp.send();
}

function getXML(){
        var xmlhttp;
        xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
        xmlhttp.onreadystatechange=function()
        {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                res=xmlhttp.responseXML;
                firstNameFields=res.documentElement.getElementsByTagName("FIRST"); //THESE LINES GRAB ALL OF THE NODES WITH THE INDICATED NAME AND HOLD THEM IN ARRAYS
                lastNameFields=res.documentElement.getElementsByTagName("LAST");
                companyFields=res.documentElement.getElementsByTagName("COMPANY");
                newtable="<table><tr><th>First</th><th>Last</th><th>Company</th></tr>";
                for(i=0;i<firstNameFields.length;i++){
                    newtable+="<tr><td>"+firstNameFields[i].firstChild.nodeValue+"</td><td>"+lastNameFields[i].firstChild.nodeValue+"</td><td>"+companyFields[i].firstChild.nodeValue+"</td></tr>";
                }
                newtable+="</table>";
                document.getElementById('resultDiv').innerHTML=newtable;
            }
        }
        xmlhttp.open("GET","thePHPFile.php?format=xml",true);
        xmlhttp.send();
}   

</script>
</head>

<body>
<input type="button" onclick="getJSON()" value="Retrieve and Parse JSON" />
<input type="button" onclick="getXML()" value="Retrieve and Parse XML" />
<div id="resultDiv"></div>
</body>
</html>

If it's being displayed in a web browser, I'd just do an ajax call in a setInterval() function to poll the server for an update. So put the refresh in JavaScript, and not in PHP.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM