gpt4 book ai didi

jquery 等待 .ajax() 在 .each() 迭代内完成

转载 作者:行者123 更新时间:2023-12-01 07:06:05 27 4
gpt4 key购买 nike

我有一个 jquery 函数,它使用 jquery .each() 选择器从特定类的所有节点获取文本:

function get_text()
{
$(".my_class").each(function ()
{
$this = $(this);
node_text = $this.text();
console.log(node_text);
})
}

这按预期工作。接下来,我想使用 .ajax() 将文本发送到 php 脚本:

function get_php_text(node_text)
{
let url = `myphp.php?string_text=${node_text}`;
$.ajax(
{
url: url,
success: function(result)
{
console.log(result);
}
});
}

该函数也按预期工作。

当我运行以下命令时:

function get_text()
{
$(".my_class").each(function ()
{
$this = $(this);
node_text = $this.text();
get_php_text(node_text);
})
}

我遇到了一个问题,因为 get_php_text() 没有等待每个 .each() 迭代完成。

如何重写 get_text() 函数,以便它在进入下一次迭代之前等待 get_php_text() 返回?

最佳答案

编辑:删除了 $.each 所指出的 promise 。

另一个例子是使用闭包,但如果您想在 $.each 中每次发生迭代时发送数据,则应该使用它。

function get_text() {
function SampleClosure(node_text) {
let url = `myphp.php?string_text=${node_text}`;
$.ajax({
url: url,
success: function(result) {
console.log(result);
}
});
}

$(".my_class").each(function() {
$this = $(this);
node_text = $this.text();
SampleClosure(node_text);
})
}

因此,上面发生的情况是,每个元素、文本都被提取并传递给闭包,闭包是一个表达式,可以在首次声明时引用其范围内的变量。因此,即使您在发送 Ajax 调用之前更改传递的变量,它仍然会使用旧的传递文本并且函数将执行。我喜欢(这是错误的)将其视为创建带有传递数据的函数实例,一旦完成,将由 GC 处理,并且在循环内,在其自己的内存分配中创建该函数的多个实例。正如我所说,这就是我的看法,我所说的可能是错误的,但从理论上讲,这就是这个过程在我看来和运作的方式。

关于jquery 等待 .ajax() 在 .each() 迭代内完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44919581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com