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