我有一个在使用XHR的同步版本时工作正常的代码,但在使用异步版本时不再有效。我是javascript的初学者,所以也许它与XHR无关,而且它只是一个js语法问题(例如由于使用外部变量,回调效果不佳)。
这是初始工作代码的一部分(我希望我没有通过尝试简化代码来隐藏错误):
function x() {
var links = document.querySelectorAll('#a');
for (i = 0; i < links.length; i++) {
var request = "test=" + i;
var xhr = new XMLHttpRequest;
xhr.open('POST', '/test.php', false);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(request);
links[i].href = xhr.responseText;
}
}
然后变成,当我试图异步时:
function x() {
var links = document.querySelectorAll('#a');
for (i = 0; i < links.length; i++) {
var request = "test=" + i;
var xhr = new XMLHttpRequest;
xhr.open('POST', '/test.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200){
links[i].href = xhr.responseText;
}
}
xhr.send(request);
}
}