如何使用AJAX从Web服务器请求变量?

时间:2013-06-14 04:48:27

标签: javascript python ajax variables webserver

我的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不兼容)

3 个答案:

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

?>