AJAX调用PHP脚本,不输出任何结果


AJAX call the PHP script not outputting any results

我试图通过AJAX更新我的tweet列表。我已经在页面上运行了脚本,并且知道脚本可以工作,并且我在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>';
}

这适用于那些不理解ReadyState代码的人。您应该知道ReadyState的以下代码:

0: request not initialized 
1: server connection established
2: request received 
3: processing request 
4: request finished and response is ready

和状态码

200: "OK"
404: Page not found

话虽如此,试着这样做:

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == XMLHttpRequest.DONE ) {
       if(xmlhttp.status == 200){
           console.log(xmlhttp.responseText);
       } else if(xmlhttp.status == 400) {
          alert('There was an error 400')
       } else {
           alert('something else other than 200')
       }
    }
}

PHP是一个超文本处理器。PHP在你的服务器上运行&结果在页面加载之前生成。您不应该使用PHP来输出像HTML元素这样的结果,如果使用JavaScript来操作文档对象模型(DOM)会更受欢迎。

但是,对于您的中间目的,您可能不会立即注意到差异。

对于PHP5,您应该查看PHP-PDO http://php.net/manual/en/class.pdo.php的使用,以防止SQL注入。

修改

:

function getall($table, $values, $conditions = null, $limit = null, $ascdesc = null){
        $values_str = "";
        foreach($values as $key => $value){
            $values_str .= $value . ", ";
        }
        $cond_str = "";
        $hascond = false;
        if($conditions != null){
            $hascond = true;
            foreach($conditions as $key => $value){
                $cond_str .= $key . "='" . $value . "' AND ";
            }
            $cond_str = rtrim($cond_str, " AND ");
        }
        $values_str = rtrim($values_str, ", ");
        $cond_str = " WHERE (" . $cond_str . ")";

        $orderby = "";
        $hasorder = false;
        if($ascdesc != null){
            $hasorder = true;
            foreach($ascdesc as $key => $value){
                $orderby = " ORDER BY " . $value . " " . $key;
                break;
            }
        }

        $sql = "SELECT " . $values_str . " FROM " . $table . " " . (($hascond)? $cond_str: "") . (($hasorder)? $orderby: "") . (($limit)? " LIMIT " . $limit: "");
        //echo $sql;
        $sql_prep = (new PDO('mysql:host=localhost;dbname=' . 'database', 'username', 'Password'))->prepare($sql);
        $sql_prep->execute();
        return $result = $sql_prep->fetchAll(PDO::FETCH_ASSOC);
    }

initialization:(返回一个数组,所以你需要json编码)

getall('table',
    Array(
          '*'
     ),
     null, 5, null);
AJAX:

function ajax(file,type, params, func){
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                //xmlhttp.responseText
                func(xmlhttp.responseText);
            }
        }
        if(type.toLowerCase() != "post"){
            xmlhttp.open(
                type, file + "?" + params_to_get(params),
                true
            );
            xmlhttp.send();
        }else{
            xmlhttp.open(
                type, file,
                true
            );
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send(params_to_get(params));

因为你有一个错误代码readystate为4,状态为500,我会说问题更多的是与mysql的兼容性或你的表与数据库的设置方式有关。

查看这篇文章了解更多关于标题的信息:Ajax对PHP的调用没有返回任何东西