2015-03-26 3 views
-1

Недавно я начал изучать Ajax и jQuery. Поэтому вчера я начал программировать простой ajax-запрос для formular, который отправляет значение списка выбора в php-скрипт и что-то считывает из базы данных.простой запрос ajax с интервалом

Это работает до сих пор! Но проблема в том, что, когда я нажимаю кнопку отправки, он запускает запрос, через 1 секунду. Я знаю, что это имеет какое-то отношение к моему интервалу. Когда я нажимаю кнопку отправки, я запускаю запрос, и каждую секунду он также запрашивает его, чтобы у меня была возможность автоматически обновлять записи о новых доходах.

Но я хотел бы иметь этот интервал цикла каждую секунду, но в первый раз, когда я нажимаю кнопку, он должен немедленно загружаться, а не через 1 секунду позже.

Вот мой код: http://jsbin.com/qitojawuva/1/edit

$(document).ready(function() { 

    var interval = 0; 
    $("#form1").submit(function() { 

     if (interval === 0) { 
      interval = setInterval(function() { 


       var url = "tbladen.php"; 
       var data = $("#form1").serialize(); 

       $.ajax({ 
        type: "POST", 
        url: url, 
        data: data, 
        success: function (data) { 
         $("#tbladen").html(data); 
        } 
       }); 
      }, 1000); 
     } 
     return false; 
    }); 


}); 

Спасибо!

+6

Пожалуйста, ваш код здесь, так что сохраняются для будущего SO посетителей. –

+3

Также обратите внимание, что 'setTimeout' лучше подходит для опроса Ajax, чем' setInterval', который не может правильно обрабатывать ситуации, когда запрос занимает больше времени, чем сам интервал. – D4V1D

+0

@ D4V1D, я думаю, вы имели в виду, что 'setTimeout' лучше, чем' setInterval' при использовании ajax. Хорошая точка зрения. 'setTimeout' следует вызывать только по завершении вызова ajax. –

ответ

0

Возможно, что-то вроде следующего, что вы ищете.

$(document).ready(function() { 

    var isFirstTime = true; 

    function sendForm() { 
     var url = "tbladen.php"; 
     var data = $("#form1").serialize(); 

     $.ajax({ 
      type: "POST", 
      url: url, 
      data: data, 
      success: function (data) { 
       $("#tbladen").html(data); 
      } 
     }); 

    } 

    $("#form1").submit(function() { 

     if (isFirstTime) { 
      sendForm(); 
      isFirstTime = false; 
     } else { 
      setTimeout(function() { 
       sendForm(); 
      }, 1000); 
     } 
     return false; 
    }); 

}); 
0

Таким образом, использование setTimeout когда обратный вызов закончил как setInterval просто продолжает работать или не закончил ваш обратный вызов.

$(function() { 

    $("#form1").submit(postData); 

    function postData() { 
     var url = "tbladen.php", 
      data = $("#form1").serialize();   
     $.ajax({ 
      type: "POST", 
      url: url, 
      data: data, 
      success: function (data) { 
       $("#tbladen").html(data); 
       setTimeout(postData, 1000); 
      } 
     }); 
     return false; 
    } 
}); 

Вид related demo

+0

Спасибо, ваша версия работает :). но одно: как я могу избежать добавления нового запроса, нажав кнопку отправки в несколько раз в вашей версии? Поскольку в моей базовой версии я использовал «if (interval === 0) {....}», чтобы избежать этого, я не буду наводнять сервер. Я попытался найти способ использовать его и в вашем коде, но мои результаты были такими, что они перестали работать в целом и больше не обновлялись. –

+0

Отключить кнопку отправки после нажатия, например [http://jsfiddle.net/lshettyl/3e3bb3jj/2/](http://jsfiddle.net/lshettyl/3e3bb3jj/2/) – lshettyl

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