循环冻结页面时的Javascript
因此,当我在firefox和google chrome上运行此功能时,页面一直冻结。我尝试使用for循环,但没有按预期工作。有什么想法吗 谢谢循环冻结页面时的Javascript,javascript,Javascript,因此,当我在firefox和google chrome上运行此功能时,页面一直冻结。我尝试使用for循环,但没有按预期工作。有什么想法吗 谢谢 function grab_users() { var start_id = document.getElementById('start_range'); start_id = start_id.value; var end_id = document.getElementById('end_range');
function grab_users() {
var start_id = document.getElementById('start_range');
start_id = start_id.value;
var end_id = document.getElementById('end_range');
end_id = end_id.value;
var grabbed = document.getElementById('grabbed_users');
while (start_id < end_id) {
$.ajax({
url: "php/extract.php",
type: 'GET',
data: {'start_range': start_id},
success: function(res) {
var usernames = res;
if (!usernames.valueOf() == "") {
usernames = usernames.replace('</br>', '');
grabbed.value += usernames + '\n';
}
}
});
start_id+=1;
}
}
函数抓取用户(){
var start_id=document.getElementById('start_range');
start\u id=start\u id.value;
var end_id=document.getElementById('end_range');
end_id=end_id.value;
var=document.getElementById(“抓取的用户”);
while(开始\u id<结束\u id){
$.ajax({
url:“php/extract.php”,
键入:“GET”,
数据:{'start\u range':start\u id},
成功:功能(res){
var usernames=res;
如果(!usernames.valueOf()=“”){
用户名=用户名。替换(“”,“”);
.value+=用户名+'\n';
}
}
});
起始id+=1;
}
}
输入值始终是字符串,在使用它们之前必须将它们转换为数字,否则,比较和递增start\u id
都不会给出预期的结果(以无限循环结束):
假设您的start\u id
是“20”
,而end\u id
是“30”
。您将从“20”<“30”
开始,这是正确的;然后在下一个循环中,您将将1
附加到开始id
字符串中,给我们“201”<“30”
。这是一个字符串比较,因此也是正确的。然后“2011”<“30”
,这也是正确的。等等
使用数字可以纠正这一点。页面确实应该“冻结”直到完成。我们讨论了多少次迭代?看起来像是常见的AJAX问题,从回调内部更新
抓取的
,那么我该如何正确执行呢?@elclars:OP没有在成功处理程序中使用任何因循环而异的内容,所以这部分没有问题。(另一方面,进行大量重叠的ajax调用…)请注意,start\u id
是一个字符串,添加1
并不能达到OP认为的效果,非常感谢您的回答:)
var start_id = parseInt(document.getElementById('start_range').value,10);
var end_id = parseInt(document.getElementById('end_range').value,10);