更改 iFrame SRC 并在数据库内容更改时重新加载 iFrame


Change iFrame SRC and reload iFrame when database content changes

如果这已被涵盖,我深表歉意,但我找不到任何足够类似的东西来帮助我。

我基本上希望替换 4 个 iFrame 的 src,并在数据库中的内容发生变化时重新加载它们。在这种情况下,我有 2 页。第一页是控制器页,它使用更改更新数据库。第二页是视图门户,它有 4 个四分叉排列的 iFrame。该页面的目的是监视特定站点,我希望能够远程更新 4 个 iFrame 中的任何一个(例如从 iPad)。

我目前有我的数据库设置。我的表有 3 列(ID/名称/URL)。到目前为止,我已经用 4 个条目填满了表格:
1 |框架1 |ht*p://www.google.com
2 |框架2 |ht*p://www.darkhorizons.com
3 |框架3 |ht*p://www.smh.com.au
4 |框架4 |ht*p://www.9to5mac.com

我希望我的查看门户页面(Page2)不断检查数据库中的每个条目,以查看它是否与当前显示的内容不同。大致如下:如果db-frame1-url不等于iframe1.src,则iframe1.src等于db-frame1-url。等等...

到目前为止,我已经用PHP构建了我的大部分网站,但是有人告诉我,AJAX JQuery解决方案可能最适合我。我真的不太确定,因为编程不是我的强项之一。

任何帮助将不胜感激!


阿贾克斯。.PHP

<?php
$con=mysqli_connect("localhost","dbuser","dbpass","dbname");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$result = mysqli_query($con,"SELECT * FROM frameContent");
$row = mysqli_fetch_array($result);
print_r(json_encode($row));
mysqli_close($con);
?>

输出

.HTML
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<script src="../assets/scripts/jquery-2.0.3.min.js"></script>
<script type="text/JavaScript"> 
setInterval(function(){
    $.ajax({
                url: "ajax.php",
                type: "GET",
                data: "",
                cache: false,
                success: function(resp) {
                    //
                    try {
               json = $.parseJSON(resp);
            } catch (error) {
               json = null;
            }
            //
            if (json) {
                       console.dir(json);
                       $.each(json, function(key,val){
                          if ($("#"+val.name).attr("src") != val.src) {
                            $("#"+val.name).attr("src",val.src);
                          }
                       });
                    }
                }
            });
},6000);
</script>
</head>
<body>
    <iframe id="frame1" src="http://www.google.com"></iframe>
    <iframe id="frame2" src="http://www.darkhorizons.com"></iframe>
    <iframe id="frame3" src="http://www.smh.com.au"></iframe>
    <iframe id="frame4" src="http://www.9to5mac.com"></iframe>
</body>
</html>

制作 php 页面 ajax.php您将在其中输出 mysql 数据:

print_r($result_of_query);

现在使用 jquery ajax 获取此页面的内容。

像这样:

setInterval(function(){
    $.ajax({
                url: "ajax.php",
                type: "GET",
                data: "",
                cache: false,
                success: function(resp) {
                    //
                        console.dir(resp);
                        var frame1 = $("#frame1").attr("src");
                        console.dir(frame1);
                        if (frame1 != resp) {
                            $("#frame1").attr("src",resp);
                        }
                }
            });
},6000);

对于多个帧,您可以执行以下操作:

在 php 中,删除 while 循环,改为这样做:

while($row = mysqli_fetch_assoc($result)){
     $json[] = $row;
}
echo json_encode($json);

也让我知道那里有什么输出...

现在在 ajax 部分:

setInterval(function(){
    $.ajax({
                url: "ajax.php",
                type: "GET",
                data: "",
                cache: false,
                success: function(resp) {
                    //
                    try {
               json = $.parseJSON(resp);
            } catch (error) {
               json = null;
            }
            //
            if (json) {
                       console.dir(json);
                       $.each(json, function(key,val){
                          console.dir(val);
                          console.dir(val.name);
                          console.dir(val.url);
                          if ($("#"+val.name).attr("src") != val.url) {
                            console.dir("if worked!");
                            console.dir($("#"+val.name).attr("src"));
                            $("#"+val.name).attr("src",val.url);
                          }
                       });
                    }
                }
            });
},6000);

数据库更改无法像流中那样更新页面,客户端对内容的请求和服务器会响应它。为了实现您的目标,您需要像其他网站一样使用jquery or javascript timer来显示最新更新的内容(例如板球比分的 cricket.yahoo.com)。

几秒钟或几分钟后(无论您的更新频率是多少),您可以发送 ajax 请求来检查内容更改,如果您发现那里,那么您可以从表中请求新的 src。然后只需使用 javascript or jquery. 更改 iframe src