设置间隔不按我想要的方式工作

时间:2014-04-07 12:12:58

标签: javascript setinterval

我想在2000毫秒左右进行一次AJAX调用。一旦用户点击锚标记,我的AJAX就会被激活。所以在那之后我希望AJAX每2000ms运行一次。

setInterval(function(){
$("a[name=device_submit]").click(function(event){
    var get_url = $(this).attr('href');
    event.preventDefault();
    $.ajax({url:get_url,
     success:function(data){
         var data = JSON.parse(data);
         latitude = data[0].fields.latitude;
         longitude = data[0].fields.longitude;
         initialize(latitude, longitude, 15);
  }});
});
}, 2000);

问题是,它运行很多次,当我点击它时,它会停止。然后,当我点击它时,它会运行很多次。 怎么了?

2 个答案:

答案 0 :(得分:2)

每次触发时,你的间隔绑定事件处理程序

使用setInterval

交换click
$("a[name=device_submit]").click(function(event) {
    setInterval(function() {
        var get_url = $(this).attr('href');
        event.preventDefault();
        $.ajax({
            url: get_url,
            success: function(data) {
                var data = JSON.parse(data);
                latitude = data[0].fields.latitude;
                longitude = data[0].fields.longitude;
                initialize(latitude, longitude, 15);

            });
        }
    }, 2000);
});

答案 1 :(得分:0)

如果您希望每2秒触发一次AJAX,请不要重新绑定您的点击处理程序,如下所示。我添加了一个标志,以便AJAX不会触发,直到您第一次点击按钮(未经测试,大括号可能关闭)

var flag = false;

var url = $("a[name=device_submit]").attr('href');

a["name=device_submit]").click(function(e){
    e.preventDefault();
    flag = true;
});

setInterval(function(){
 if(flag){
  $.ajax({url:url,

   success:function(data){
     var data = JSON.parse(data);
     latitude = data[0].fields.latitude;
     longitude = data[0].fields.longitude;
     initialize(latitude, longitude, 15);

  });
 }
}, 2000);