说,例如,在我的HTML文件,我有一个表,如下表行的变量,其中{{}}只是变量:AJAX请求不再指向纠正成功回调方法
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
</tr>
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
</tr>
然后在我的JavaScript文件我有以下代码:
var rows = document.getElementsByTagName("tr");
for (var r = 0; r < rows.length; r++){
var tr = rows[r];
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;
//Problem is the following tr is referring to the last tr in the for loop by the time the AJAX request is complete
tr.appendChild(td);
}
});
}
结果我得到的是:
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
</tr>
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
<td>SomeJSON from when rows was 0 in the for loop</td>
<td>SomeJSON from when rows was 1 in the for loop</td>
</tr>
但是,我想要的结果是:
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
<td>SomeJSON from when rows was 0 in the for loop</td>
</tr>
<tr id="{{ object.id }}">
<td class="name">{{ object.name }}</td>
<td>SomeJSON from when rows was 1 in the for loop</td>
</tr>
我知道我可以通过向AJAX请求async: false
解决这个问题,但我想保持同步。
任何帮助将不胜感激。
您试过更改'for(var rows = 0; rows
因为'$ .ajax'是异步的,所以在调用成功的时候tr对于所有成功函数都是'tableRows [tableRows.length - 1]' –
@MichaelCoker - 为什么改变变量名会有所作为? –