jQuery each()和多个Ajax调用—Ajax中的元素;在迭代中不匹配父对象

jQuery each()和多个Ajax调用—Ajax中的元素;在迭代中不匹配父对象,jquery,Jquery,我有一个each()函数,它以相反的方式(lol)遍历许多tr元素 我想现在的情况是,Ajax调用的执行时间比TR元素上的迭代时间要长。。。我想我可以将async设置为false,但是有没有办法保持异步? 解决方案 正如@Nicola在下面指出的,可能最好将ID与Ajax调用一起发送到服务器,然后在成功函数中再次检索它。这是因为您为每个触发一个Ajax调用,并且由于调用是异步的,您无法保证它们会按顺序返回,这意味着第二个调用将在第一个调用被触发后立即触发,而无需等待响应。将async设置为fal

我有一个each()函数,它以相反的方式(lol)遍历许多tr元素

我想现在的情况是,Ajax调用的执行时间比TR元素上的迭代时间要长。。。我想我可以将
async
设置为
false
,但是有没有办法保持异步?

解决方案


正如@Nicola在下面指出的,可能最好将ID与Ajax调用一起发送到服务器,然后在成功函数中再次检索它。

这是因为您为每个
触发一个Ajax调用,并且由于调用是异步的,您无法保证它们会按顺序返回,这意味着第二个调用将在第一个调用被触发后立即触发,而无需等待响应。将
async
设置为
false
可以解决这个问题,如果你想让事情保持“异步”,你应该在成功回调中启动第二个调用,但是你的迭代不会等待,所以你需要重构所有东西,这是因为你要为每个
启动一个ajax调用,而且调用是异步的,您无法保证它们将按顺序返回,这意味着第二个调用将在第一个调用触发后立即触发,而无需等待响应。将
async
设置为
false
解决问题,如果你想保持事情“异步”,你应该在成功回调中启动第二个调用,但你的迭代不会等待,所以你需要重构一切

是的,我同意。。。但是有没有异步解决方案来定义
tr
并在ajax调用中检索相同的请求呢?@AlexMoore发送一个请求,而不是每个请求发送一个请求row@Nicola,我想您的意思是将
async
设置为
false
?@AlexMoore问题是您在迭代时重新定义了
tr
,您可以做的一件事是以某种方式将当前的
tr
发送到您的服务器,然后让服务器将其发送回您。@Nicola,这可能是解决此特定问题的最佳解决方案。谢谢是的,我同意。。。但是有没有异步解决方案来定义
tr
并在ajax调用中检索相同的请求呢?@AlexMoore发送一个请求,而不是每个请求发送一个请求row@Nicola,我想您的意思是将
async
设置为
false
?@AlexMoore问题是您在迭代时重新定义了
tr
,您可以做的一件事是以某种方式将当前的
tr
发送到您的服务器,然后让服务器将其发送回您。@Nicola,这可能是解决此特定问题的最佳解决方案。谢谢使用
var
关键字,使变量的作用域正确,而不是全局变量。目前,您所有的成功回调函数都使用完全相同的变量(因此在运行时打印出它的值),而不是使用该回调要使用的值。实际上,哇。。。这是一个非常简单的解决方案。我认为这是可行的!使用
var
关键字,使变量的作用域正确,而不是全局变量。目前,您所有的成功回调函数都使用完全相同的变量(因此在运行时打印出它的值),而不是使用该回调要使用的值。实际上,哇。。。这是一个非常简单的解决方案。我认为这是可行的!
<table>
    <tr><th>header row</th></tr>
    <tr><td id="row1">row 1</td></tr>
    <tr><td id="row2">row 2</td></tr>
    <tr><td id="row3">row 3</td></tr>
</table>

$($("table tr:gt(0)").get().reverse()).each(function() {
     tr=$(this);
     console.log(tr); // correctly prints my TRs in reverse order
}
$($("table tr:gt(0)").get().reverse()).each(function() {
    tr=$(this);
    console.log(tr); // correctly prints my TRs in reverse order
    $.ajax({
         type: "POST",
         url: "ajax.php",
         data: data,
         dataType: "json",
         success: function(json) {
             console.log(tr); // incorrectly prints TRs in not-reverse order
             // TRs are not matched with above. Chaos ensues.
         }
    });
});