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

时间:2015-08-17 17:53:20

标签: javascript php ajax

我正在尝试通过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>';

}

2 个答案:

答案 0 :(得分:2)

这适用于那些不了解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')
       }
    }
}

答案 1 :(得分:0)

ryandonohue,

PHP是一个超文本处理器。 PHP在您的服务器上运行&amp;结果在页面加载之前生成。您不应该使用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);

    }

初始化:(返回一个数组,因此需要进行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));

由于您的状态为500的状态为4的状态为错误代码,我会说MYSQLi的兼容性或您的数据库与数据库的设置方式有关。

查看此POST以获取有关标头的更多信息: Ajax call to PHP is returning nothing