Employee网页以循环方式对Node.js Web服务器进行Ajax调用。给出的代码。所有数据值均正确。我希望回调UpdateTeamArr
被调用n次,其中n等于循环最大值-document.getElementById("deptSelect").options.length
。但是它只调用了一次。感谢您的努力和支持。
for (var i = 1; i < document.getElementById("deptSelect").options.length; i++) {
var objJSON = {
"deptid": document.getElementById("deptSelect").options[i].dataset.id,
"empid": selectedEmployeeId
}
var strJSON = JSON.stringify(objJSON);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("post", "../../GetEmployeesTeams", true);
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState === XMLHttpRequest.DONE && xmlhttp.status === 200) {
UpdateTeamArr(xmlhttp);
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send("strJSON=" + strJSON);
}
}
function UpdateTeamArr(xmlhttp) {
}
app.post('/GetEmployeesTeams', function(req, res) {
var connection = mysql.createConnection({
host : "127.0.0.1",
port : 3306,
user : "root",
password : "root",
database : "lighting"
});
var strJSON = req.param('strJSON');
var objJSON = JSON.parse(strJSON);
connection.connect();
connection.query("SELECT db_teamemp.teamid, db_department.id AS deptid FROM lighting.db_teamemp, lighting.db_department, lighting.db_team WHERE db_teamemp.empid='" +
objJSON.empid + "' AND db_department.id='" + objJSON.deptid + "' AND db_teamemp.teamid=db_team.id AND db_team.dept=db_department.id;",
function(err, result, fields) {
if (err)
throw err;
else {
connection.end();
res.status(200);
return res.send(result);
}
});
});
答案 0 :(得分:1)
您为什么不尝试通过创建一个uniq JSONArray并仅在'deptSelect'内包含所有雇员ID的列表来仅对服务器执行单个请求?
这样,您发送的响应还带有一个列表,该列表包含另一种JSONArray格式的员工的其他属性,您可以在UpdateTeamArr函数中进行迭代
答案 1 :(得分:1)
啊,您在这里将var
用于xmlhttp
。变量不是块作用域的,而是悬挂式的-这意味着对UpdateTeamArr
的所有调用都使用此单个变量。我相信您是调用了N次,但是每次都会有最后一次响应。
对此理论的一个简单测试就是将那行的var
更改为let
。