![](/img/trans.png)
[英]Auto Refresh PHP Function without reloading page Javascript / Ajax
[英]Refresh javascript calculations without reloading page
我有一个提交按钮,该按钮使用javascript xmlhttp请求来调用php页面,其唯一功能是在我的主页上为Google Earth窗口编写kml文件。 在Web浏览器中无法以html的形式查看php页面。
php文件中的公式按预期工作。 我遇到的问题是,在我第一次手动按下Submit之后,我希望脚本每5秒继续重复一次,直到我手动重新加载页面(或按下按钮以停止脚本)为止。 因为我计划让多个用户同时查看页面,所以会为每个用户分配一个随机的5位数字,以保存其会话信息,并在新创建的会话文件夹中创建kml文件,直到他们重新加载页面为止(然后该页面将创建用户的新会话号)。
由于为每个用户指定了唯一的会话ID,因此该页面无法随着php计算的重复而重新加载。 因此,我的javascript函数结尾处有一个return false行。
我希望能够使用javascript调用setInterval来重复该功能,而无需重新加载页面。 如果要重新加载页面,则现在将无法在新会话中查看刚刚创建的kml文件。 让我知道是否有人有任何建议。 以下是适用的代码。
index.php主页上的DIV ID
<div>
<form id="KMLsubmit" name=KMLsubmit >
<input class="KMLsubmit" type="submit" value="Create KML" onclick="createKML()"/>
</form>
</div>
index.php主页上的JavaScript函数
function createKML() {
$('#KMLsubmit').submit(function () {
$.get("generateKML.php",function(data,status){
});
//alert("Generating your KML files!");
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("kmldetails").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","generateKML.php?session=" + session,true);
xmlhttp.send();
return false;
});
}
让我知道是否有人对如何执行此操作有任何建议。 谢谢您的帮助。
尝试
$(function(){
$('#KMLsubmit').submit(function () {
$.get("generateKML.php",function(data,status){
});
update();
return false;
});
function update(){
$.ajax({
url: 'generateKML.php',
data: {
session: session
}
}).done(function(result){
$('#kmldetails').html(result);
setTimeout(update, 5000)
});
}
})
将createKML()
外部,在KMLsubmit
提交事件上调用它,将超时功能设置为5秒,并在下次提交时清除超时,然后重新启动该过程,如下所示:
var myTimer = false;
function createKML() {
var xmlhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("kmldetails").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", "generateKML.php", true);
xmlhttp.send("session=" + session);
myTimer = setTimeout(function(){createKML()}, 5000);
}
document.getElementById('KMLsubmit').onsubmit = function(event){
(event.preventDefault) ? event.preventDefault() : event.returnValue = false; //prevent the form from submitting and reloading the page
if(myTimer) clearTimeout(myTimer);
createKML();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.