我已经设置了管理面板,其中使用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;
}
答案 0 :(得分:2)
每次发出请求时,都会告诉它每10秒发一次请求。
等等。
它开始冻结,因为它最终会尝试更快地发出请求,然后计算机才能处理。
使用setTimeout
,而不是setInterval
。
(另外,你应该传递一个函数,而不是一个字符串:setTimeout(process, 10000)
);