2013-12-14 91 views
1

这很可能是重复的,是的,我已经看到它们herehere。我的问题与第二个问题非常相似。当用户滚动到底部时,多次触发Ajax函数

第二个链接显示,来解决这个问题,我们必须做这样的事情:

function loadMoreResults() { 
    if (flag) return; 
    flag = true; 
[...] 
    flag = false; 
} 

我已经尽了实际的代码中安装这样的逻辑,但它所做的就是给语法错误,不管了()'和{}已被正确打开和关闭。也许我做错了。

$(document).ready(

    function loadAll (param) { 
     if (param < 0) { 
      return; 
     } else if (isNaN(param)) { 
      param = param.responseText; 
     } else if (!isNaN(param)) { 
     } 

     $.ajax({ 
      url: '../login/functionLogin/functions.php', 
      type: 'POST', 
      dataType: 'JSON', 
      data: {task: "load", next_id: param}, 
      success: function(data) { 
       next_id = data.next_id; 
       $.each(results, function(i, attr) { 
        //Do whatever and return next_id 
        }  
       }) 

      } 
     }); 

     //Since the next_id is within the function, I do not have to make it global. 

     $(window).scroll(function() { //If user scrolls to bottom, fire anything inside 
       if ($(window).scrollTop() >= $(document).height() - $(window).height()) { 

        loadAll(next_id).die(); //Firing twice or even thrice 

     } 
    }) 

}); 

问题:如何阻止我当前的脚本发射两次?这个剧本的结构很好吗? [我强烈感觉这是非常糟糕的设计和导致这个问题的一个]

我可以详细说明更多。我试着用这个问题最好的措辞。

回答

1

看来你回答了你自己的问题!添加一个变量并检查它是否未定义,然后执行处理,如果已经设置,则不要执行任何操作。

$(window).scroll(function() { //If user scrolls to bottom, fire anything inside 
      if ($(window).scrollTop() >= $(document).height() - $(window).height()) { 
       if (typeof flag != 'undefined' && flag) return; 
       loadAll(next_id); // .die(); // what is the die(); ??? //Firing twice or even thrice 
       flag = true; 

     } 
    }) 
+0

谢谢!这似乎已经成功了。 .die()试图以某种方式解决这个问题。我认为如果我用死()它不会再被解雇,但这是没用的。 –

+0

@TiffanyLowe我知道有一个die()在PHP中,但从来没有听说过死于JavaScript。无论如何,如果它解决了您的问题,请将其标记为解决方案。 –

+1

jQuery曾经有一个'.die()'函数 - 它删除了添加了'.live()'的事件处理函数。但是'loadAll(next_id).die();'会是一个错误,因为loadAll()不会返回一个jQuery对象...... – nnnnnn

相关问题