3 回答
TA贡献1810条经验 获得超4个赞
你不能打电话savedNumberOfLessonInDay(number)来获取号码。您正在尝试使用 执行此操作return this.responseText;,但在对服务器的请求完成之前不会触发。
你可以使用 Promises 来解决这个问题。
function savedNumberOfLessonInDay(dayID){
return new Promise((resolve) => {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById('demo4').innerHTML = this.responseText; //Returns the right number
resolve(this.responseText);
}
};
var PageToSendTo = "AJAX/countLessonInDay.php?";
var MyVariable = dayID;
var VariablePlaceholder = "GETDayID=";
var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;
xhttp.open("GET", UrlToSend, false);
xhttp.send();
});
}
并用await它来称呼它:
document.getElementById('demo').innerHTML = 'test' + await savedNumberOfLessonInDay(number);
或者,如果由于某种原因您不能使用await:
savedNumberOfLessonInDay(number).then((response) => {
document.getElementById('demo').innerHTML = 'test' + response;
});
TA贡献1789条经验 获得超8个赞
函数 savedNumberOfLessonInDay() 不会等待 ajax 完成。所以需要在回调函数xhttp.onreadystatechange中设置demo的html。
在不改变你的实现太多的情况下,你可以简单地修改你的代码:
function savedNumberOfLessonInDay(dayID){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById('demo4').innerHTML = this.responseText; //Returns the right number
document.getElementById('demo').innerHTML = 'test' + this.responseText;
}
};
var PageToSendTo = "AJAX/countLessonInDay.php?";
var MyVariable = dayID;
var VariablePlaceholder = "GETDayID=";
var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;
xhttp.open("GET", UrlToSend, false);
xhttp.send();
}
然后只需调用该函数而不是尝试设置
savedNumberOfLessonInDay(number);
- 3 回答
- 0 关注
- 126 浏览
添加回答
举报