使用Ajax在具有偏移量和限制而没有异步的多个块中调用PHP脚本:false

问题描述

我有一个PHP脚本,它将大量行插入MysqL数据库。为了防止超时,我分几个部分运行脚本,并使用jQuery ajax从另一个文件调用它:

    var done = false,offset = 0,limit = 100; 
    
    
    while (!done) {
    var url = "myscript.PHP?offset=" + offset + "&limit=" + limit;

        jQuery.ajax({
   
            url: url,async: false,type: "GET",success: function(response) {
            console.log("success");
                    if (response.processed !== limit) {
                        done = true;
                    }
                    offset += response.processed;
                    console.log("Updating weekly rankings,users processed: "+offset);
                    
            },fail: function(jqXHR,textStatus) {
                    console.log("fail");
                    done = true;

            }
        });
    }

还有我所谓的PHP脚本:

$mydb->setQuery("SELECT player FROM players LIMIT ".$limit." OFFSET ".$offset);
$rows = $mydb->loadobjectList();
    
foreach ($rows as $row) {

//loop through players get some data and insert rows to database

}

$response = array(
    'processed' => count($rows),'message' => 'All OK!'
);

header('Content-Type: application/json');
echo json_encode($response);
die;

当async设置为false时,它工作正常,但是当设置为true时,脚本将永远挂起并循环(只是不断地向数据库中无限插入新行)。我也无法通过console.log得到任何提示,因为它没有显示在浏览器控制台中。

由于async:false已弃用,并且在运行时也挂起了浏览器,我真的很感谢另一种方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)