2013-04-20 7 views
0

У меня есть кнопка отправки, которая использует запрос javascript xmlhttp для вызова php-страницы, единственной функцией является запись файла kml для окна google earth на моей главной странице. Страница php не просматривается в веб-браузере как html.Обновить вычисления javascript без перезагрузки страницы

Формулы в файле php работают по назначению. Проблема, с которой я столкнулась, заключается в том, что после того, как я вручную нажимаю кнопку отправки в первый раз, я хочу, чтобы сценарий продолжал повторяться каждые 5 секунд, пока я не перезагружу страницу вручную (или нажмите кнопку, чтобы остановить скрипт). Поскольку я планирую одновременное просмотр нескольких пользователей при каждом просмотре страницы, каждому пользователю назначается случайный 5-значный номер для хранения информации о сеансе и создания файлов kml во вновь созданной папке сеанса до тех пор, пока они не перезагружат страницу (которая затем создаст новый номер сеанса для пользователя).

Поскольку каждый пользователь имеет уникальный идентификатор сеанса, страница не может перезагружаться по мере повторения расчетов php. Из-за этого у меня есть возвращаемая ложная строка в конце моей функции javascript.

Я хотел был бы иметь возможность использовать javascript для вызова setInterval для повторения функции без перезагрузки страницы. Если страница должна была перезагрузиться, только что созданный файл kml теперь не будет доступен для просмотра в новом сеансе. Дайте мне знать, есть ли у кого-нибудь предложения. Ниже приведен действующий код.

DIV ID на главной странице index.php

<div> 
    <form id="KMLsubmit" name=KMLsubmit > 
    <input class="KMLsubmit" type="submit" value="Create KML" onclick="createKML()"/> 
    </form> 
</div> 

функция JavaScript на главной странице index.php

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; 
    }); 
    } 

Позвольте мне знать, если у кого есть какие-либо предложения о том, как это сделать. Спасибо за помощь.

+0

вам используют jquery, не так ли? –

+0

Как создается переменная 'session' –

+1

, что является целью' $ .get ("generateKML.php", function (data, status) {}); '? –

ответ

0

сделать createKML() внешний, вызовите его на KMLsubmit представить событие, установить тайм-аут функция 5 секунд и снимите тайм-аут на следующей submition затем перезапустить процесс так:

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(); 
} 
+0

К сожалению, когда я использовал это, он перезагрузил страницу на отправке, поэтому я не могу принести новый KML на страницу.Где-то я могу использовать «return false»; –

+0

вы можете либо изменить ввод отправки на кнопку, либо использовать 'event.preventDefault', как я только что добавил в код выше. – razzak

+0

Вышеуказанное изменение не сработало, но когда я сменил кнопку отправки на кнопку, она работает так же, как и предполагалось. Спасибо всем за помощь. –

0

Попробуйте

$(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) 
     }); 
    } 
}) 
+0

Вы хотите удалить исходный '$ .get', который является no-op. –

+0

@ T.J.Crowder Я упомянул об этом в своих комментариях к вопросу, но комментарии OP сделали меня сомнительным –

+0

Каким будет способ писать без $ .get? –

Смежные вопросы