Javascript AJAX请求不再指向成功回调方法中的正确变量

Javascript AJAX请求不再指向成功回调方法中的正确变量,javascript,html,ajax,flask,Javascript,Html,Ajax,Flask,例如,在我的HTML文件中,表中有以下表行,{{}}只是变量: {{object.name} {{object.name} 然后在我的JavaScript文件中,我有以下代码: var rows=document.getElementsByTagName(“tr”); 对于(var r=0;r

例如,在我的HTML文件中,表中有以下表行,{{}}只是变量:


{{object.name}
{{object.name}
然后在我的JavaScript文件中,我有以下代码:

var rows=document.getElementsByTagName(“tr”);
对于(var r=0;r
我得到的结果是:


{{object.name}
{{object.name}
当for循环中的行为0时的SomeJSON
当for循环中的行为1时的SomeJSON
然而,我的预期结果是:


{{object.name}
当for循环中的行为0时的SomeJSON
{{object.name}
当for循环中的行为1时的SomeJSON
我知道我可以通过添加到AJAX请求
async:false
来解决这个问题,但我希望保持它的异步


任何帮助都将不胜感激。

这可能是一个涉及Javascript闭包的问题吗?如果在for循环内定义函数并在函数内分配变量,则它们将通过成功回调保留其作用域

另一种(更干净/更优雅的)解决方案将
for
循环和函数调用重写为(谢谢)

在函数内部,变量的作用域是有限的。以前,每个ajax成功回调都引用相同的变量(异步请求返回时的变量)


您是否尝试过将(var rows=0;rows更改为(var i=0;i?似乎这就是您想要做的。如果这不起作用,请发布您的所有代码-
tableRows
不在您的代码中。因为
$.ajax
是异步的,在调用success时,tr将是
tableRows[tableRows.length-1]
一切成功functions@MichaelCoker-为什么更改变量名会有不同?@JaromandaX
rows
是所有的
tr
,然后OP将其用作循环的计数器,但引用
tableRows
,这在代码中不存在。抱歉,在问题中误读了代码:平移甚至更干净的解决方案是将for循环替换为
[].forEach.call(tableRows,function(tr){…})
好主意,我刚开始回家,大约一个小时后会编辑,非常感谢!@Hodrobond嘿,我编辑了代码,我在试图让代码更容易从实际代码中理解时,在变量名上犯了一些错误。请你更新你的答案好吗当然,给我大约一个小时左右的时间,我会回来的电脑前:)@Hodrobond您的解决方案确实有效,谢谢您的帮助
[].forEach.call(rows, function(tr) { 
        var id = tr.id;

        $.ajax({
            url: "/some-link/" + id,
            success: function(some_json){
                some_json = JSON.parse(some_json);
                var td = document.createElement("td");
                td.innerHTML = some_json;

                tr.appendChild(td);
            }
        });

});