我正在使用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>
答案 0 :(得分:2)
next_results(uuid, 2);
processing = false; <-- WRONG
您需要在成功功能
中执行此操作success : function(data) {
...
...
processing = false;
}