簡體   English   中英

刷新javascript計算而無需重新加載頁面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM