Ajax PHP - 仅当 DOM Explorer 打开(边缘)时才会回显结果
Posted
技术标签:
【中文标题】Ajax PHP - 仅当 DOM Explorer 打开(边缘)时才会回显结果【英文标题】:Ajax PHP - Result is only echoed if DOM Explorer is Open (Edge) 【发布时间】:2016-06-08 21:50:04 【问题描述】:我有一个使用 Ajax 每 4 秒调用一次 php 脚本的页面。 PHP 脚本会回显一些文本,然后将其放入页面上的 div 中。 (PHP 脚本确实连接到 mysql 服务器,这可能是我出现以下问题的原因吗?)
这是奇怪的部分。第一次调用 PHP 脚本时,它会很好地回显所有文本。然而 4 秒后,当 Ajax 再次调用 PHP 脚本时,页面变为空白。更奇怪的是,当我右键单击 MS Edge 上的查看源代码时,所有页面内容都加载进来,然后如果我关闭源代码,4 秒后它又消失了。
有人知道为什么会这样吗?
我的 Ajax JS 文件:
function updateCandles()
var candleIndexStart = $('#candle-index-start').text();
var candleSort = $('#candle-sort').text();
var resultArray = $.ajax(
type: 'GET',
url: 'php/display_candles.php',
data:
'sort': candleSort,
'candle-start': candleIndexStart
,
async: false
).responseText.split("h8ktncuidabciafvabc7932hcueqbc73gd8713gdy713gd6831df8136fd13d");
$('.candles').html(resultArray[0]);
$('#candle-counter').html(resultArray[1]);
setTimeout(updateCandles, 4000);
$(document).ready(function()
updateCandles();
);
我的 PHP 脚本:
<?php
session_start();
function timeAgo($time_ago)
$time_ago = strtotime($time_ago);
$cur_time = time();
$time_elapsed = $cur_time - $time_ago;
$seconds = $time_elapsed ;
$minutes = round($time_elapsed / 60 );
$hours = round($time_elapsed / 3600);
$days = round($time_elapsed / 86400 );
$weeks = round($time_elapsed / 604800);
$months = round($time_elapsed / 2600640 );
$years = round($time_elapsed / 31207680 );
// Seconds
if($seconds <= 60)
return "just now";
//Minutes
else if($minutes <=60)
if($minutes==1)
return "one minute ago";
else
return "$minutes minutes ago";
//Hours
else if($hours <=24)
if($hours==1)
return "an hour ago";
else
return "$hours hrs ago";
//Days
else if($days <= 7)
if($days==1)
return "yesterday";
else
return "$days days ago";
//Weeks
else if($weeks <= 4.3)
if($weeks==1)
return "a week ago";
else
return "$weeks weeks ago";
//Months
else if($months <=12)
if($months==1)
return "a month ago";
else
return "$months months ago";
//Years
else
if($years==1)
return "one year ago";
else
return "$years years ago";
$connection = mysqli_connect("localhost", "username", "pass", "db");
if(!$connection)
echo "Error";
if($_GET['teacher'] == 'yes')
$result2 = mysqli_query($connection, "SELECT * FROM candles WHERE approved=0 ORDER BY date desc LIMIT " . $_GET['candle-start'] . ",20");
else
$result2 = mysqli_query($connection, "SELECT * FROM candles WHERE approved=1 ORDER BY date " . $_GET['sort'] . " LIMIT " . $_GET['candle-start'] . ",20");
if(mysqli_num_rows($result2) > 0)
$counter = 0;
while($row = mysqli_fetch_assoc($result2))
$counter = $counter + 1;
if($counter % 2 == 1)
echo "</div>";
echo "<div class='candle-row'>";
if($row["approved"] == 1 and $_GET['teacher'] == 'yes')
continue;
echo "<div class='candle'><div class='candle-icon'>";
echo '<span class="fa-stack fa-4x"><i class="fa fa-square-o fa-stack-2x"></i><i class="fa fa-' . $row["candle_icon_type"] . ' fa-stack-1x" style="color: ' . $row["colour"] . '"></i></span></div>';
echo '<div style="display:table;height:100%;"><div style="display:table-cell;vertical-align:middle;"><div>';
echo "<h3><a href='candle.php?id=" . $row["id"] . "'>For " . ucwords($row["title"]) . "</a></h3>";
echo "<br>";
$result3 = mysqli_query($connection, "SELECT * FROM users WHERE id=" . $row['user_id'] . " LIMIT 1");
if(mysqli_num_rows($result3) > 0)
while($row1 = mysqli_fetch_assoc($result3))
if($row["anonymous"] == 1 and $_SESSION["user_group"] == '1')
echo "<h4><a href='candle.php?id=" . $row["id"] . "'>Shared by an Anonymous User<br>";
else
echo "<h4><a href='candle.php?id=" . $row["id"] . "'>Shared by " . $row1["username"] . "<br>";
else
echo "<h4><a href='candle.php?id=" . $row["id"] . "'>Shared by Unknown<br>";
echo "Shared " . ucwords(timeAgo($row["date"])) . "<br>" . $row['fuel'] . " Fuel</a></h4></div></div></div>";
echo "</div>";
echo "h8ktncuidabciafvabc7932hcueqbc73gd8713gdy713gd6831df8136fd13d";
if($_GET['teacher'])
$result1 = mysqli_query($connection, "SELECT id FROM candles WHERE approved=0");
else
$result1 = mysqli_query($connection, "SELECT id FROM candles WHERE approved=1");
if(mysqli_num_rows($result1) == 0)
echo '0 Candles';
elseif(mysqli_num_rows($result1) == 1)
echo '1 Candle';
else
echo mysqli_num_rows($result1) . ' Candles';
mysqli_close($connection);
?>
【问题讨论】:
抱歉,忘记了,现在编辑。 【参考方案1】:是的,EDGE
在您没有打开它时似乎确实错过了 console
对象(您称之为 DOM Explorer)。当您的console
关闭时,它不“存在”,因此EDGE
会抛出一个您看不到的错误,因为您的console
已关闭。
(对你来说听起来很奇怪?欢迎来到Microsoft
创建逻辑)!
我猜你在代码中使用了console.log()
方法。因此,要么删除 console.log()
调用,要么将此解决方法放在 javascript 的顶部:
if (!window.console) window.console = ;
if (!window.console.log) window.console.log = function () ;
【讨论】:
我不太确定我应该将代码的哪些部分放入您提供的代码中的函数中。我已经用我当前的代码更新了我的问题。 @Th3Gam3rz 只是把它放在第一个 javascript 行。这真的是您使用的所有代码吗?因为您提供的代码中没有console
。
是的,这是代码。我将您提供的两行添加到 JS 文件的开头,没有什么不同。
我知道旧版本的 IE 有这个问题,我不敢相信它仍然存在于 IE 中。
@Th3Gam3rz 好的,那没关系。这听起来像是我在使用 IE 时遇到的问题。以上是关于Ajax PHP - 仅当 DOM Explorer 打开(边缘)时才会回显结果的主要内容,如果未能解决你的问题,请参考以下文章
IE Explore 11 < c++ ATL COM Browser Helper Object (Add-on) 替换DOM中的文本
使用 PHP、Ajax、jQuery 将当前 DOM 保存到服务器上的文件?