我的JavaScript中有一个循环,它不断地检查变量EventCounter
,如果eventcounter为零,那么它继续执行一个动作然后递增它++,然后它继续做什么,直到变量更改,这是代码:
EventCounter = {{eg.globals.EventCounter}};
for(var i = 0; i < n; ++i) {
r = rects[i];
ctx.strokeRect((r.x*sc)|0,(r.y*sc)|0,(r.width*sc)|0,(r.height*sc)|0);
window.rects = rects[i];
//console.log(EventCounter);
if (EventCounter === 0) {
console.log("event counter is" + EventCounter)
//setTimeout( function () {document.getElementById("sb").click()}, 5000)
EventCounter++
console.log("event counter is now " + EventCounter);
}
}
}
现在,EventCounter全局变量从Web服务器获取其值(它是一个python webserver及其python变量)。
但我的问题是如何在网络服务器上检测到变量已更改? ajax请求对吗?我将如何请求变量值来检测它是否已更改,以便循环可以再次运行? (**服务器与PHP不兼容)
答案 0 :(得分:0)
查看WebSockets,它允许服务器在建立连接后随时向浏览器发送消息。您使用Javascript事件处理程序处理传入消息,从而避免连续轮询。
所有主流浏览器都支持WebSockets,包括IE10。当然,您必须确保您的服务器应用程序也可以支持WebSockets。
答案 1 :(得分:0)
您可以像Mike W建议的那样使用WebSockets。
你也可以在你的python服务器上编写一个脚本,在调用它时返回JSON,然后在JSON文件中包含你想要的变量及其值。这将支持所有浏览器,而不仅仅是WebSockets需要的现代浏览器。
答案 2 :(得分:0)
这是一个jQuery实现,每1000ms轮询一次服务器脚本并显示结果。您的典型响应时间+浏览器处理时间应远远小于轮询间隔,否则您的请求可能会备份。
<强>使用Javascript:强>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>eventCounter</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
var interval = setInterval(function() {
// this is where your ajax call is made.
$.ajax('geteventcounter.php', {
cache: false,
dataType:'json',
success: function(data) {
// do your browser-side processing here.
$('#eventCounter').text(data.eventcounter);
}
});
}, 1000);
</script>
</head>
<body>
<p>eventCounter is <span id=eventCounter></span></p>
</body>
</html>
服务器端PHP: 对于此示例,使用会话变量,该变量在每个请求时递增并返回JSON字符串。
<?php
session_start();
// initialise counter, or increment it.
if (isset($_SESSION['eventcounter'])) {
$_SESSION['eventcounter']++;
} else {
$_SESSION['eventcounter'] = 0;
}
// set output mime type
header("ContentType: application/json");
// copy session variable to a new array, convert to JSON and send.
echo json_encode(['eventcounter' => $_SESSION['eventcounter']]);
?>