2

JQuery Mobile でアプリを作成しています。PHPを使用してサーバーからデータを取得するlist.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 を使用し、AJAX 関数を 15 秒ごとに呼び出します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 OnLoad="setInterval('checkfornew()', 1500);">
于 2012-04-05T10:47:36.023 に答える
0

モバイル Web アプリを作成しようとしていると思います。setTimeout() を介して 15 秒ごとにページ全体をロードすると、ブラウザの更新ボタンを 15 秒ごとにクリックするのと同じように、ブラウザに不要な負荷がかかる可能性があります!!! 代わりに、json Web サービスを使用して、 jquery.getJSONメソッドでphp-json応答を解析するだけです。jquery 用の list.html と json-web-services 用の list.php の 2 つの異なるファイルを使用します。以下は、レスポンス結果で 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

代わりに、ユーザーに通知する通知スレッドを開始するように更新ロジックを変更してみませんか? この方法でのポーリングは非常に非効率的です。

于 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 を調べる必要があります。基本的に、たとえば JSON 形式で変更を返すことができる別の PHP ページを設定します。ページで Javascript ( ajaxjQuery ライブラリのメソッドなど) を使用すると、変更を取得し、スクリプトをそれらに反応させることができます。

于 2012-04-05T10:49:00.547 に答える
0

15 秒ごとに更新するには、cron ジョブを使用することをお勧めします。データベースが変更されるたびにユーザーに通知するために、ここに私の解決策があります: ユーザーが行ったアクションの記録を含む別のテーブルを作成します。別のオプションは、データベースにハッシュ関数を実装することですが、それがどれほど効率的かはわかりません。

于 2012-04-05T10:57:56.643 に答える