![](/img/trans.png)
[英]how to prevent this function to be executed more than 2 times in x miliseconds?
[英]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.