如何防止javascript中的ajax函数一次执行几次

时间:2013-12-11 18:16:59

标签: javascript jquery

我正在使用PLAY Framework 2.2.1构建搜索引擎,并且在列出结果方面存在问题。搜索结果存储在框架提供的缓存中,可以使用uniqe id访问。我不希望结果一次全部显示,因此结果列表通过ajax以块的形式提取。 结果站点加载后的第一部分和每次发生某个滚动事件时的其余部分。

现在的问题是有些结果会被列出几次和警报消息 告诉我,函数 next_results 有时会以变量 pos 的相同值执行两次或更多次。 为防止出现此问题,我使用了处理变量,但这似乎无法正常工作。

var processing = false;
var not_finished = true;
var pos = 0;
function next_results(uuid, result_size){
    alert("input\n" + result_size + " result_size\ncurrent_position" +  pos);

    jsRoutes.controllers.Application.getResults(uuid, pos, result_size).ajax({
        success : function(data) {
                var len = data.length;
//              alert("input\n" + result_size + " result_size\ncurrent_position" +  pos + "\n result_length" + len);
                pos = pos + len;
                if (len == 0){
                    not_finished = false;
                } else {
                    for (var i = 0; i < len; i++) {
                        var result= data[i];
                        $('#results').append(result.string);
                    };
                }
            }
    });
}

var uuid;
function set_uuid (x){
    uuid = x;
}


$(document).ready(function(){
    //initial
    if (!processing){
        processing = true;
        next_results(uuid, 10);
        processing = false;
    }

    $(document).scroll(function(e){

        if (processing)
            return false;

        if (not_finished && $(window).scrollTop() >= $(document).height() - $(window).height() - 300){
            processing = true;
            next_results(uuid, 2);
            processing = false;
        }
    });
});

唯一ID在html代码中设置(通过Scala):

<script>set_uuid('@uuid');</script>

1 个答案:

答案 0 :(得分:2)

        next_results(uuid, 2);
        processing = false;  <-- WRONG

您需要在成功功能

中执行此操作
success : function(data) {
    ...
    ...           
    processing = false; 
}