Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 刷新javascript计算而不重新加载页面_Php_Javascript_Jquery - Fatal编程技术网

Php 刷新javascript计算而不重新加载页面

Php 刷新javascript计算而不重新加载页面,php,javascript,jquery,Php,Javascript,Jquery,我有一个submit按钮,它使用javascript xmlhttp请求调用php页面,该页面的唯一功能是在我的主页上为google earth窗口编写kml文件。php页面在web浏览器中不能作为html查看 php文件中的公式按预期工作。我遇到的问题是,在我第一次手动按submit之后,我希望脚本继续每5秒重复一次,直到我手动重新加载页面(或按按钮停止脚本)。因为我计划让多个用户同时查看页面,所以会为每个用户分配一个随机的5位数,以保存他们的会话信息,并在新创建的会话文件夹中创建kml文件,

我有一个submit按钮,它使用javascript xmlhttp请求调用php页面,该页面的唯一功能是在我的主页上为google earth窗口编写kml文件。php页面在web浏览器中不能作为html查看

php文件中的公式按预期工作。我遇到的问题是,在我第一次手动按submit之后,我希望脚本继续每5秒重复一次,直到我手动重新加载页面(或按按钮停止脚本)。因为我计划让多个用户同时查看页面,所以会为每个用户分配一个随机的5位数,以保存他们的会话信息,并在新创建的会话文件夹中创建kml文件,直到他们重新加载页面为止(这将为用户创建一个新的会话编号)

因为每个用户都被指定了一个唯一的会话id,所以当php计算重复时,页面无法重新加载。因此,在javascript函数的末尾有一个返回false行

我希望能够使用javascript调用setInterval来重复该函数,而无需重新加载页面。如果要重新加载页面,则新会话中将无法查看刚刚创建的kml文件。如果有人有任何建议,请告诉我。以下是适用的代码

main index.php页面上的DIV id

<div>
  <form id="KMLsubmit" name=KMLsubmit >
    <input class="KMLsubmit" type="submit" value="Create KML" onclick="createKML()"/>
  </form>
</div> 
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()
external,在
KMLsubmit
submit事件上调用它,将超时函数设置为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();
}

您正在使用jquery,不是吗?
session
变量createdwhat是
$.get(“generateKML.php”,function(data,status){})的用途是什么?是的,使用我有限的知识。我使用get调用允许从我的主index.php页面中调用generateKML.php页面。我尝试了很多事情,这是我唯一可以去工作的安排。我肯定我有错误,但这是唯一有效的方法。如果你有任何改进的建议,请告诉我。谢谢。你想删除首字母
$.get
,这是一个不可操作的选项。@T.J.Crowder我在对问题的评论中提到过,但是op的评论让我怀疑,如果没有$.get?@Arun P Johny,该怎么写呢?我试过了,它仍然以同样的方式工作。它不会创建新的KML。我也尝试过使用setInterval,但没有成功。不幸的是,当我使用它时,它在提交时重新加载了页面,所以我无法将新的KML引入页面。是否有地方可以使用“return false”;您可以将提交输入更改为按钮,也可以像我刚才在上面的代码中添加的那样使用
事件。Prevent Default
。上面的更改不起作用,但当我更改提交按钮时,它的工作方式与预期的一样。谢谢大家的帮助。