簡體   English   中英

如何防止javascript中的ajax函數一次執行幾次

[英]How to prevent a ajax function in javascript to be executed several times at once

我正在使用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>
        next_results(uuid, 2);
        processing = false;  <-- WRONG

您需要在成功功能中執行此操作

success : function(data) {
    ...
    ...           
    processing = false; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM