【问题标题】:Synchronous POSTing to SQL handle using AJAX [duplicate]使用 AJAX 同步 POST 到 SQL 句柄 [重复]
【发布时间】:2017-06-26 10:19:43
【问题描述】:

我希望对处理我发布的单词的 SQL 插入的页面进行同步调用。但是,由于我有很多块并且 SQL 不是异步的,我希望一个接一个地处理每个 ajax 调用/块

for (chunk = 1; chunk <= totalchunks; chunk++) {
    $.ajax({
    type: "POST",
    dataType: "json",
    url: "updateHandle.php", 
    data: {words:arr.slice(1000*(chunk-1),1000*chunk),push:getpush},
    success: function(){
        console.log('Items added');
    },
    error: function(){
        console.log('Errors happened');
    }
    });
}

async: false,

由于某种原因不起作用。每个 ajax 调用总是转到错误案例而不是成功案例。那么我忽略了这个问题还有另一种解决方案吗?

我考虑过使用忙等待的 while 循环并使用锁,但 setTimeout() 函数没有按预期工作(可能是我的一些错误)

编辑:对于一个 AJAX 调用来说,块太大了,因此需要序列化。此外,块的数量可能会因调用而异,因此需要灵活性。

【问题讨论】:

  • XMLHttpRequest API 怎么样?
  • @VitaliyVinnychenko 嗯? $.ajax 只是一个围绕 XMLHttpRequest 的 jQuery 包装器。您还有什么建议可以使用本机 XHR 而不是 jQuery 来完成吗?
  • "每个 ajax 调用总是转到错误情况,而不是成功情况。" ——所以调试它?注意传递给错误函数的参数。查看控制台是否有错误。查看“网络”选项卡,了解请求和响应的实际情况。
  • @Igor — 这似乎与这里描述的问题无关。
  • 不推荐使用同步 AJAX 请求。看看this

标签: javascript ajax asynchronous


【解决方案1】:

怎么样:

function insertWords(words){
    if(words.length) {
        $.ajax({
            type: "POST",
            dataType: "json",
            url: "updateHandle.php", 
            data: {
                words: words.splice(0, 1000),
                push: getpush
            },
            success: function(){
                console.log('1000 items added');
                insertWords(words);
            },
            error: function(){
                console.log('Errors happened');
                return;
            }
        });
    } else {
        console.log("Done inserting all words.")
    }
}

您可以将回调用作 insertWords 的参数或返回 promise 以使其更具弹性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多