繁体   English   中英

弹出消息无法显示来自php mysql的新更新记录

[英]Popup message cannot display new update records from php mysql

我已经制作了带有自动刷新功能的弹出消息,因此每隔几分钟,弹出窗口就会出现以显示记录。 而且有效。

以下是自动刷新的JavaScript代码:

$(document).ready(function() {
    setInterval(function() {
        $('#rtnotice').load('plugins/notice/n_notice_invoice.php').fadeIn("slow");
    }, 5000)
});

n_notice_invoice.php的代码

    <script>
    $(document).ready(function(){
        $("#hide").click(function(){
            $("#noticearea").hide();
        });
    });
    </script>

<?php
    try{
    require_once "../../config/c_config.php";
    $db = dbConn::getConnection();
    $timestamp = $_REQUEST['term'];
    $sqlck = $db->prepare("SELECT COUNT(id_notice_alert) as ttlinv FROM str_notice_alert WHERE date_alert > '$timestamp'");
    $sqlck->execute();
    $resck = $sqlck->fetch(PDO::FETCH_ASSOC);
    if($resck['ttlinv'] == '0')
    {}else{
    ?>
    <div id="noticearea">
    <div id="modal">
            <div class="modal-content">
                <div class="header">
                    <div id="circle" align="center"><h1><?php echo $resck['ttlinv'];?></h1></div><div class="titlenotice"><h1>NOTICE ALERT<?php echo $timestamp; ?></h1></div>
                    <div class="break"></div>
                </div>
                <div class="copy">
                    <p>
                    <table width="100%" class="gridtable">
                    <tr><th>No</th><th>Name</th><th>Status</th><th>Location</th><th>Date</th></tr>
    <?php 
    $sqll = $db->prepare("SELECT * FROM str_notice_alert");
    $sqll->execute();
    while($resl = $sqll->fetch(PDO::FETCH_ASSOC)){ 
    ?>
    <tr><td align="center"><?php echo $resl['id_notice_alert']; ?></td><td><?php echo $resl['alert_name']; ?></td><td align="center"><?php echo $resl['alert_status']; ?></td><td align="center"><?php echo $resl['alert_location']; ?></td><td><?php echo $resl['date_alert']; ?></td></tr>
    <?php } ?>
    </table>
                    </p>
                </div>
                <div class="cf footer">
                    <button id="hide" class="btn">Close</button>
                </div>
            </div>
            <div class="overlay"></div>
        </div></div>
    <?php 

    $sqltrunc = $db->prepare("TRUNCATE TABLE str_notice_alert");
    $sqltrunc->execute();

    }$db = null;}
    catch (PDOException $e) {
    echo "Connection Error " . $e->getMessage();
    }
    ?>

显示弹出消息后,它将显示文件n_notice_invoice.php现有记录,并通过可用查询删除记录。 在任何出现。 但是问题是,为什么记录没有更新/更改。 除非我直接刷新文件n_notice_invoice.php,然后自动刷新显示最新数据。

$timestamp = $_REQUEST['term'];

每次您调用该页面时都应更新。 您应该使用传递$ timestamp作为参数的Ajax加载页面,而不是仅仅加载它。

为了得到您需要的东西,我可以建议您使用长时间轮询吗? PHP进行长时间轮询,或者使用node.js更好。 以php为例,例如“服务器”页面:

$timeStart = time();
// Create connection
$con = mysqli_connect('localhost','root','','polldb');

// Check connection
if (mysqli_connect_errno($con))
    die ('Failed to connect to MySQL: ' . mysqli_connect_error() );

// select where item is new
if(isset($_POST['timestamp'])){
    $timestamp = $_POST['timestamp'];
}else{
    // get current database time
    $row = mysqli_fetch_assoc(mysqli_query($con,'SELECT now() as now'));
    $timestamp = $row['now'];
}
$sql = "SELECT * FROM `notification` WHERE timestamp > '$timestamp'";

$newData = false;
$notifications = array();

// loop while there is no new data and is running for less than 20 seconds
while(!$newData && (time()-$timeStart)<20){

    // check for new data
    $result = mysqli_query($con,$sql);
    while($row = mysqli_fetch_assoc($result)){
        $notifications[] = $row;
        $newData = true;
    }
    // let the server rest for a while
    usleep ( 500000 );
}

// get current database time
$row = mysqli_fetch_assoc(mysqli_query($con,'SELECT now() as now'));
$timestamp = $row['now'];
mysqli_close($con);

// output
$data = array('notifications'=>$notifications,'timestamp'=>$timestamp);
echo json_encode($data);
exit;

和客户:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(function(){
    pullNotification();
});

function pullNotification(timestamp){
    var data = {};
    if(typeof timestamp!='undefined')
        data.timestamp = timestamp;

    $.post('longpoll.php',data,function(msg){

        var newData = '';
        for(i in msg.notifications){
            newData+=msg.notifications[i].message+'\n';
        }
        if(newData!='')
            alert(newData);
        pullNotification(msg.timestamp);
    },'json');
}
</script>

这将检查数据库更新并将其弹出。 每20秒就会更新一次请求。 显然,您必须使其适应您的需求。

我相信您的问题来自缓存的请求(在ajax本身的浏览器中),请尝试禁用ajax缓存:

$(document).ready(function() {
    setInterval(function() {
       $.ajax({
        url: "plugins/notice/n_notice_invoice.php",
        cache: false
        })
        .done(function( data ) {
            $('#rtnotice').html(data).fadeIn("slow");
        });
    }, 5000)
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM