0

我的 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 全局变量从网络服务器(它是一个 Python 网络服务器和它的一个 Python 变量)获取它的值。

但我的问题是如何检测到网络服务器上的变量已更改?一个ajax请求对吗?我将如何请求变量值以检测它是否已更改,以便循环可以再次运行?(**服务器与 PHP 不兼容)

4

3 回答 3

0

看一下WebSockets,它允许服务器在建立连接后随时向浏览器发送消息。您使用 Javascript 事件处理程序处理传入消息,从而避免需要连续轮询。

所有主流浏览器都支持 WebSocket,包括 IE10。当然,您必须确保您的服务器应用程序也可以支持 WebSockets。

于 2013-06-14T07:59:10.980 回答
0

这是一个 jQuery 实现,它每 1000 毫秒轮询一次服务器脚本并显示结果。您的典型响应时间 + 浏览器处理时间应该大大少于您的轮询间隔,否则您的请求可能会备份。

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']]);

?>
于 2013-06-14T22:24:49.203 回答
0

你可以像 Mike W 建议的那样使用 WebSockets。

你也可以在你的 python 服务器上编写一个脚本,当它被调用时返回 JSON,然后在 JSON 文件中拥有你想要的变量和它们的值。这将被所有浏览器支持,而不仅仅是像 WebSockets 这样的现代浏览器需要。

于 2013-06-14T08:24:43.593 回答