gpt4 book ai didi

javascript - 有时卡住浏览器后的 Ajax 请求

转载 作者:行者123 更新时间:2023-11-30 17:29:52 27 4
gpt4 key购买 nike

我制作了管理面板,其中使用 ajax 设置通知警报。它工作正常,但几分钟后它开始卡住浏览器。知道我做错了什么,因为这是我的第一个 Ajax 项目。

以下是我正在使用的代码,我在一个由 body onload 事件调用的函数中使用了 setInterval。

<html>    
<body onload="process()">
<-- Some notification divs to be replaced by javascript -->
</body>
<html>

JavaScript

<script>
var xmlHttp = createXmlHttpRequestObject();

function process() {
setInterval('process()', 10000);
if (xmlHttp) {
try {
xmlHttp.open("GET", "response.json", true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
} catch (e) {
console.log("Can't connect to server:\n" + e.toString())
};
}
}

function handleRequestStateChange() {
if (xmlHttp.readyState == 4) {
{
if (xmlHttp.status == 200) {
try {

handleServerResponse();

} catch (e) {}

} else {
console.log("There was a problem retrieving the data:\n" + xmlHttp.statusText);

}
}
}
}


function handleServerResponse() {

responseJson = JSON.parse(xmlHttp.responseText);
for (var i = 0; i < responseJson.newbooking.length; i++) {

// html += "<li><a href='admin_user.php?id=" + + "'><div class='desc'>" + responseJson.users[i].first_name + ", " +responseJson.users[i].last_name + " joined</div></a></li>";

bookinghtml += "<li><a href='makeinvoice.php?bookingid=" + responseJson.newbooking[i].booking_id + "'><span class='subject'><span class='from'>" + responseJson.newbooking[i].company_name + " </span><span class='time'> " + responseJson.newbooking[i].user_name + " </span></span>";
bookinghtml += "<span class='message'> from " + responseJson.newbooking[i].start_date + ", " + responseJson.newbooking[i].batches + " " + responseJson.newbooking[i].campaign + "</span></a></li>";
}



myDiv = document.getElementById("bookinginfo");
myDiv.innerHTML = bookinghtml;


}

最佳答案

每次你发出请求,你告诉它每10秒发出一次请求。

  1. 因此在加载时,您发出请求并启动计时器。
  2. 10 秒后您发出另一个请求并启动另一个计时器。
  3. 10 秒后您发出两个请求,每个请求启动另一个计时器。
  4. 10 秒后您发出四个请求,每个请求启动另一个计时器。

等等。

它开始卡住,因为它最终试图发出比计算机可以处理的更快的请求。

使用setTimeout,而不是setInterval

(此外,您应该传递一个函数,而不是一个字符串:setTimeout(process, 10000));

关于javascript - 有时卡住浏览器后的 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com