【问题标题】:How to reload MySQL records in AJAX div while results are being returned?返回结果时如何在 AJAX div 中重新加载 MySQL 记录?
【发布时间】:2013-04-24 11:31:40
【问题描述】:

我想知道如何使用AJAX 重新加载<div>,其中显示的内容是从MySQL database 检索到的记录。棘手的部分是我希望<div> 显示每个结果 30 秒,然后重新加载以显示下一个结果。

这里是media table

_______________________________________________
| FIELD 1 |  FIELD 2  |  FIELD 3  |  FIELD 4  |
-----------------------------------------------
|   ID    |   TVOne   |   TVTwo   |  Active   |
-----------------------------------------------
|   15    |   no      |     no    |    no     |
-----------------------------------------------
|   29    |   yes     |     no    |   yes     |
-----------------------------------------------
|   53    |    no     |     no    |    no     |
-----------------------------------------------
|   71    |   yes     |    yes    |    yes    |
-----------------------------------------------

在位于 TVOne 页面的 <div> 中,我希望它加载记录 29 和 71。在位于 TVTwo 页面的 <div> 中,我希望它只加载记录 71。这个 table 由用户修改后端,所以结果总是不同的。

我正在阅读 THIS QUESTION,我相信 javascript 选择器 .eq() 可能是其中的一部分,但我不知道如何将它们组合在一起。

<div>所在的页面称为index4.php。上一页 (index3.php) 执行查询以查看是否有任何记录设置为活动的,如果是,则将 num_rows 设置为 $count 并转到 index4.php?count=$count,如果没有,则返回显示序列的开头index.php

这里是index3.php重定向函数:

<?php
$result = $mysqli->query("SELECT * FROM media WHERE Active = 1 AND TVTwo = 1");
$count = $result->num_rows;
if($count > 0){$media = "index4.php?count=$count";}
else{$media = "index.php";}
?>

<script>
refresh=window.setTimeout(function(){location.href="<?php echo $media;?>"},15000);
</script>

这是我的AJAX 代码,用于加载&lt;div&gt;

<script>
function MediaQuery(qty)
    {
    if (qty=="")
        {
        document.getElementById("Media").innerHTML="";
        return;
        }
    if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
        }
    else
        {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    xmlhttp.onreadystatechange=function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("Media").innerHTML=xmlhttp.responseText;
            }
        }
    xmlhttp.open("GET","../process/QueryMedia.php?count="+qty,true);
    xmlhttp.send();
    }
</script>

这里是QueryMedia.php:

<?php
$count = $_GET["count"];

$sql = ("SELECT * FROM media WHERE Active = 1 AND TVTwo = 1 LIMIT $count");

if(!$result_sql = $mysqli->query($sql))
    {
    echo QueryCheck("getting the media records ","from the media",$mysqli);
    }

// fetch it here
?>

【问题讨论】:

  • 到目前为止你尝试过什么?向我们展示一些代码,否则我们必须假设您希望我们为您完成工作,而我们不会这样做。你基本上已经找到了你需要的一切:提供数据的服务器端脚本、AJAX 调用、替换视图的 JS 东西和触发自动重新加载的 JS 超时。
  • @TillHelge 除了基本的AJAX 调用来加载&lt;div&gt; 之外,我真的没有太多其他东西,但我很欣赏你所说的,所以我会发布它。跨度>
  • @TillHelge 这正是我的感受,就像我拥有了所有的原料......我只是没有食谱。
  • 不知何故你遗漏了真正有趣的部分。您选择什么格式来传输数据? JSON?你的代码到底有什么问题?你被困在哪里了?什么不起作用?
  • @TillHelge 我确实发布了我所有的代码,所以如果你没有看到它,我没有它。使用PHP 完成数据传输,除非我不明白您在问什么?我所拥有的代码的问题是......嗯......它还不存在。我所拥有的只是一个加载&lt;div&gt; 的AJAX 调用,仅此而已。这就是我被卡住的地方,我不知道如何进入下一步或前进的方向。

标签: php javascript mysql ajax


【解决方案1】:

好吧,我明白了。

  1. index3.php 检查数据库以查看是否已将任何内容设置为“活动”(在这种情况下,它还会检查它已设置为显示在哪个显示器上)。
  2. 当它找到一条记录时,它通过$_GET将变量$i(用作键并设置为最高结果)发送到index4.php
  3. index4.php 页面加载时,它会触发function MediaQuery(i),然后根据给定的键向QueryMedia.php 询问数据库记录。
  4. 加载QueryMedia.php 结果后,i 键减 1,然后在短暂延迟后再次发送 function MediaQuery(i)
  5. 一旦i 键到达最后一个结果(始终为0),页面将重定向到index.php 上显示序列的开头。

这里是index3.php

<?php
$sql = $mysqli->query("SELECT * FROM media WHERE Media_Active = 1 AND Media_TVTwo = 1");
$count = $sql->num_rows;

if($count != 0)// If there are results returned then redirect to the media page.
    {
    $i = $count - 1;

    $media = "index4.php?i=$i";
    }
else // Else redirect to the first page.
    {
    $media = "index.php";
    }
?>

<script>
window.setTimeout(function(){location.href="<?php echo $media;?>"},20000);
</script>

这里是index4.php

<script>
function MediaQuery(i)
    {
    if (i < 0)
        {
        window.setTimeout(function(){location.href="index.php"},0);
        return;
        }
    if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
        }
    else
        {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    xmlhttp.onreadystatechange=function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("Media").innerHTML=xmlhttp.responseText;
            var i = document.getElementById("i").innerHTML;
            var i = i-1;
            setTimeout(function() {MediaQuery(i)},20000);
            }
        }
    xmlhttp.open("GET","../process/QueryMedia.php?i="+i,true);
    xmlhttp.send();
    }
</script>

<body onload="MediaQuery(<?php echo $_GET['i'];?>)">

这里是QueryMedia.php

<?php
$i = $_GET["i"];

    $sql = ("SELECT * FROM media WHERE Media_Active = 1 AND Media_TVTwo = 1 ORDER BY Media_Name");

    if(!$result_sql = $mysqli->query($sql))
        {
        echo QueryCheck("getting the media records ","from the media",$mysqli);
        }

    $id = array();
    while($idquery = $result_sql->fetch_assoc())
        {
        $id[] = $idquery['Media_ID'];
        }

    $sql2 = ("SELECT * FROM media WHERE Media_ID = $id[$i]");

    if(!$result_sql2 = $mysqli->query($sql2))
        {
        echo QueryCheck("getting the media records ","from the media",$mysqli);
        }

    while($media = $result_sql2->fetch_assoc())
        {
        $img = $media['Media_Name'];
        $width = $media['Media_Width'];
        $height = $media['Media_Height'];
        $msg = $media['Media_Msg'];
        }
?>

<img src="../images/media/<?php echo $img; ?>" border="2" width="<?php echo $width; ?>px" height="<?php echo $height; ?>px">

<p align="center" class="f24" style="margin:5px"><?php echo $msg; ?></p>
<p id="i" style="display:none;"><?php echo $i; ?></p><!-- used to return the key value -->

我毫不怀疑这可能不是最有效的处理方式,有很多服务器请求正在进行,我敢肯定代码有点臃肿。如果有人想帮助我做得更好,我会非常感谢您的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2013-07-10
    相关资源
    最近更新 更多