2

我正在使用 JQuery Mobile 构建一个应用程序。我有一个名为 list.php 的页面,它使用 PHP 从服务器获取数据。我需要脚本每 15 秒运行一次,并在数据库发生更改时通知用户。我是 PHP 和 Javascript 的初学者,所以我不知道如何做到这一点,甚至不知道它是否可能。

这是我目前正在使用的代码。

<?php
$number = $_GET['number'] ;

mysql_connect('localhost','username','password');
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}


//specify database 
mysql_select_db("database") or die("Unable to select database"); 

// Build SQL Query 
$query = "select * from table where tablenumber = \"$number\" and state = 0  
  order by time";

 $result = mysql_query($query) or die("Couldn't execute query");

?>





<!DOCTYPE html> 
<html> 
    <head> 
    <title>title</title> 

    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
    <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>

</head> 
<body> 


<div data-role="page">

    <div data-role="header" > 
    <h1>Transpanel</h1>
</div>
    <div data-role="content">   


        <div data-role="collapsible-set">

    <?php 
// display the results returned
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<div data-role="collapsible" data-theme="b" data-content-theme="d">
   <h3><?= $row["OSO"] ?></h3>
   <p><?=$row["AIKA"]?><p>
</div>
<?php } ?>



</div>


    </div><!-- /content -->

</body>
</html>
4

6 回答 6

1

只需使用 AJAX,每 15 秒调用一次 AJAX 函数setInterval('checkfornew()', 15000);。所以:

function checkfornew() {
    var http = new XMLHttpRequest();
    var url = "get.php";

    http.open("GET", url, true);

    //Send the proper header information along with the request
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");

    http.onreadystatechange = function() {
        if(http.readyState == 4 && http.status == 200) {
            if(http.responseText != "") {
                alert(responseText);
            }
        }
    }
    http.send(params);
}

并将 body-tag 更改为

<body OnLoad="setInterval('checkfornew()', 1500);">
于 2012-04-05T10:47:36.023 回答
0

为什么不修改你的更新逻辑,让它启动一个通知线程来通知你的用户呢?以这种方式轮询是非常低效的。

于 2012-04-05T10:46:44.593 回答
0

如果您在 linux 机器上,请将脚本添加到 cronjob

评论后编辑

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php

或者如果它在 url

 00 * * * * lynx -dump http://www.thegeekstuff.com/myscript.php
于 2012-04-05T10:47:13.720 回答
0

服务器上的代码不能自行运行并通知浏览器更改,它根本没有内置到 HTTP 协议中。

一个简单的解决方案是每 15 秒重新加载一次页面:

<body onload="window.setTimeout(function(){document.location.reload(true);},15000)">

如果您希望浏览器在不重新加载页面的情况下获得更新,您应该研究 AJAX。基本上,您设置了另一个可以返回更改的 PHP 页面,例如 JSON 格式。在页面中使用 Javascript(例如ajaxjQuery 库中的方法),您可以获得更改并让脚本对它们做出反应。

于 2012-04-05T10:49:00.547 回答
0

我认为您正在尝试创建一个移动网络应用程序。每 15 秒通过 setTimeout() 加载整个页面可能会给您的浏览器带来不必要的负载,就像每 15 秒点击浏览器刷新按钮一样烦人!!!相反,您需要做的就是使用 json web-services 并在jquery.getJSON方法中解析php-json响应。使用 2 个不同的文件:jquery 的 list.html 和 json-web-services 的 list.php。下面是解析带有响应结果的 json 的示例:{key1:OSO;key2:AIKA}

$(document).ready(){ 
//always include jquery code in $(document).ready(){ your javascript here} loads faster
setInterval(function() {
    $.getJSON('list.php', function(json) {
    //assuming list.php resides with list.html directory
    //console.log(json)
      console.log(json.result.key1);
       console.log(json.result.key2);

    });
  }, 15000); //request list.php every 15 seconds
});
于 2012-04-05T11:14:54.697 回答
0

为了每 15 秒更新一次,您最好使用 cron 作业。为了在数据库更改时通知用户,这是我的解决方案:创建另一个表,其中包含用户所做操作的记录。另一种选择是在数据库上实现散列函数,但我不知道这会有多效率。

于 2012-04-05T10:57:56.643 回答