Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止javascript中的ajax函数一次执行多次_Javascript_Jquery - Fatal编程技术网

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

如何防止javascript中的ajax函数一次执行多次,javascript,jquery,Javascript,Jquery,我正在使用PLAY Framework 2.2.1构建搜索引擎,但在列出结果时遇到问题。搜索结果存储在框架提供的缓存中,可以使用uniqe id访问。我不希望结果一次全部显示出来,因此结果列表通过ajax分块获取。 结果站点加载后的第一部分,以及每次发生某个滚动事件时的剩余部分 现在的问题是,一些结果被多次列出,并且警告消息 告诉我函数next_results有时会使用变量pos的相同值执行两次或更多次。 为了防止这个问题,我使用了processing变量,但它似乎不能正常工作 var proc

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

现在的问题是,一些结果被多次列出,并且警告消息 告诉我函数next_results有时会使用变量pos的相同值执行两次或更多次。 为了防止这个问题,我使用了processing变量,但它似乎不能正常工作

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;
        }
    });
});
var处理=false;
var not_finished=真;
var-pos=0;
函数下一个结果(uuid、结果大小){
警报(“输入\n”+结果大小+“结果大小\n当前位置”+位置);
jsRoutes.controllers.Application.getResults(uuid、pos、result\u size).ajax({
成功:功能(数据){
var len=data.length;
//警报(“输入\n”+结果大小+“结果大小\n当前位置”+位置+“\n结果长度”+长度”);
pos=pos+len;
如果(len==0){
未完成=错误;
}否则{
对于(变量i=0;i=$(文档).height()-$(窗口).height()-300){
处理=真;
下一个结果(uuid,2);
处理=假;
}
});
});
唯一id在html代码中设置(通过Scala):

set_uuid('@uuid');

我对web开发相当陌生。你能给我一个解释吗?我如何开始执行下一个结果3或4次?当写入if(!processing){processing=true;next_results(uuid,2);processing=true;next_results(uuid,2);processing=true;next_results(uuid,2);}时,它返回相同两个结果的3倍results@MatthiasMunz创建新问题,而不是在注释中添加其他查询。它为什么工作?因为
getResults
是一个异步调用,您将其视为同步调用。立即调用next_results之后的行,不等待。JS调试警报?你的console.log(obj)被绑架了吗?谢谢你的建议,biesior,我对web开发还很陌生。你能回答我下面的问题吗?
<script>set_uuid('@uuid');</script>
        next_results(uuid, 2);
        processing = false;  <-- WRONG
success : function(data) {
    ...
    ...           
    processing = false; 
}