【发布时间】:2015-11-10 11:07:24
【问题描述】:
我正在尝试通过 AJAX 更新我的推文列表。我已经在页面上运行了脚本并且知道该脚本有效,并且我的 ajax 调用中有一个 console.log 行,所以我知道它也会受到影响。
setInterval(function () {sendRequest()}, 5000);
function sendRequest(){
var xmlhttp;
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){
console.log("yay");
}
}
xmlhttp.open("GET","getTweets.php",true);
xmlhttp.send();
}
我的 AJAX 应该每 5 秒运行一次,然后点击 PHP 脚本返回已存储在数据库中的新结果。我的 PHP 看起来像:
$conn = mysqli_connect("localhost", "*", "*", "*");
if (!$conn) {
echo("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM tweets;";
$results = mysqli_query($conn, $query);
while($list = mysqli_fetch_assoc($results)){
echo '<div class="tweet-containter">';
echo '<img class="user-img" alt="user-img" src="images/gb.png">';
echo '<h3 class="tweet-username">@'.$list['username'].'</h3>';
echo '<p class="tweet-body">'.$list['tweetBody'].'</p>';
echo '<p class="tweet-body">Tweeted: '.$list['datePosted'].'Retweet: <i class="fa fa-retweet" id="retweet4" onclick="retweetAJAX()"></i> Like: <i class="fa fa-thumbs-up" id="likes4" onclick="likeAJAX()"></i> Dislike: <i class="fa fa-thumbs-down" id="dislikes4" onclick="dislikeAJAX()"></i></p>';
echo '</div>';
}
【问题讨论】:
-
可能是它出错了,所以当 xmlhttp.readyState==4 但 xmlhttp.status 为 not 200 时,您应该有一个分支来处理并打印出该状态,以便您可以解决问题
-
@developerwjk 我不确定我理解你的意思。我的 if 语句检查以确保它们都是我想要的。我的“yay”字符串正在打印到控制台。所以readystate是4,status是200。
-
如果服务器出现内部错误并返回状态 500 会怎样。您会得到 readystate 4 状态 500,并且您没有在上面打印任何内容,所以您不会知道
-
@developerwjk 是有道理的。我修改了我的声明,看起来像
if (xmlhttp.readyState==4 && xmlhttp.status==200){ console.log("yay"); } else if (xmlhttp.status==500){ console.log("Internal error"); } else { console.log("Unknown error"); } -
对于用于 AJAX 的 PHP 文件,您不应该使用 mysqli 错误报告。我想我应该提一下。
标签: javascript php ajax