繁体   English   中英

如何在不刷新页面的情况下刷新MySQL查询的结果?

[英]How can I refresh the results of a MySQL query without refreshing the page?

我想定期刷新查询的结果,例如每10到30秒。 我不确定如何将我在网上阅读的代码实现为自己的代码,这在很多情况下都是不同的。

MySQL查询与jQuery及其他所有内容位于同一页上。

目前,我使用以下PHP代码检索MySQL表的值:

$result = mysqli_query($con,"SELECT * From auction WHERE category = 'Bathroom' ORDER BY ID DESC");


while($row = mysqli_fetch_array($result))
  {
    echo "<form name='auction' id='auction" . $row['ID'] . "'>
            <input type='hidden' name='id' value='" . $row['ID'] . "' />
            <div class='auction-thumb'>
                <div class='auction-name'>" . $row['Item'] . "</div>";
            echo "<img class='auction' src='" . $row['ImagePath'] . "' />";
            echo "<div class='auction-bid'>Current Bid: £<div class='nospace' id='" . $row['ID'] . "'>" . $row['CurrentBid'] . "</div></div>";
            echo "<div class='auction-bid'>Your Name: <input type='text' class='bidder' name='bidname' autocomplete='off'/></div>";
            echo "<div class='auction-bid'>Your Bid: <input type='text' class='auction-text' name='bid' autocomplete='off'/></div>";
            echo "<div class='auction-bid'><input type='submit' name='submit' value='Place Bid!' /></div>";
    echo "</div></form>";
  }
echo "</table>";

mysqli_close($con);

?>

这将检索多行,并填充页面。

我想经常刷新或“重新运行”此查询,以便更新当前出价。

我已经有这个jQuery代码,它将新出价发布到PHP页面,目前,其他任何查看此页面的人只有手动刷新页面后才能看到新出价。

    <script>
    $(document).ready(function(){
        $('form[name="auction"]').submit(function(){
            var id = $(this).find('input[name="id"]').val();
            var bidname = $(this).find('input[name="bidname"]').val();
            var bid = $(this).find('input[name="bid"]').val();
            var currentbid = $('#'+id).text();
            var itemdesc = $(this).find('.auction-name').text();

            if (bidname == '')
            {
                alert("No name!")
                return false;   
            }

            if (bid > currentbid)
            {
                alert("Bid is greater than current bid");   
            }
            else
            {
                alert("Bid is too low!");
                return false;   
            }

            $.ajax({
            type: "POST",
            url: "auction-handler.php",
            data: {bidname: bidname, bid: bid, id: id, itemdesc: itemdesc},
            success: function(data){
                window.location.reload();
            }
        });
        return false;

        }); 
    });
</script>

我的auction-handler.php代码:

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

$con=mysqli_connect("xxxx","xxxx","xxxx","xxxx");

if (mysqli_connect_errno())
    {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

$bidname = $_POST['bidname'];
$bid = $_POST['bid'];
$id = $_POST['id'];
$itemdesc = $_POST['itemdesc'];

$query = "UPDATE auction SET CurrentBid = '$bid', Bidder = '$bidname' WHERE ID = '$id'";

$query2 = "INSERT INTO auction_log (Item, Bid, Bidder) VALUES ('$itemdesc','$bid','$bidname')";



mysqli_query($con, $query) or die(mysqli_error());

mysqli_query($con, $query2) or die(mysqli_error());

mysqli_close($con);
?>

我在网上阅读的许多内容并不能真正帮到我,我是一个开端,无法自行编写。 我确实很难理解如何做以及如何在自己的方案中实现它。

任何意见是极大的赞赏。

你不远。

您需要做的是用ajax请求的响应替换相关表的html,而不是重新加载整个页面。

所以代替:

success: function(data){
            window.location.reload();
        }

你可以做:

success: function(data){
            $('#auction'+id).before(data).remove();
        }

编辑

定期ajax请求:

的PHP:

//update-handler.php
$response = array();

$result = mysqli_query($con,"SELECT * From auction WHERE category = 'Bathroom' ORDER BY ID DESC");


 while($row = mysqli_fetch_array($result)){
  $response[] = (object)array('id'=>$row['ID'],'val'=>$row['CurrentBid']);
 // get all the updated rows and put them into response array;
 }

header('content-type=application/json');
exit(json_encode($response)); // send the json serialized response to jquery ajax

javascript:

var timeout = 30000 //30 seconds
setInterval(function () {

    $.ajax({
    type: "POST",
    url: "update-handler.php",
    success: function (data) {
        $(data).each(function (i, d) {  //loop though each bid amount from ajax response
            $('#auction' + d.id).find('.nospace').html(d.val); //nospace is not a good target name, but its the only unique selector for that div

        });
    }
    });
}, timeout);

 <div id="results"> ... </div> <script> var time = 30000; function autoRefresh() { $.ajax({ type: "POST", dataType: "HMTL", url: "auction-handler.php", data: {bidname: bidname, bid: bid, id: id, itemdesc: itemdesc}, success: function(data){ $("#results").append(data); } }); } setTimeout("autoRefresh()", time); </script> 

暂无
暂无

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

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