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

Javascript AJAX调用PHP脚本,不输出任何结果,javascript,php,ajax,Javascript,Php,Ajax,我正试图通过AJAX更新我的推文列表。我已经在页面上运行了这个脚本,并且知道这个脚本是有效的,我在ajax调用中有一个console.log行,所以我知道它也受到了影响 setInterval(function () {sendRequest()}, 5000); function sendRequest(){ var xmlhttp; if (window.XMLHttpRequest){// code for IE7+, Firefox,

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

}
$conn=mysqli\u connect(“localhost”、“*”、“*”、“*”、“*”);
如果(!$conn){
echo(“连接失败:”.mysqli_connect_error());
}
$query=“从tweets中选择*”;
$results=mysqli_查询($conn,$query);
而($list=mysqli\u fetch\u assoc($results)){
回声';
回声';
回显“@”。$list['username']”;
echo'

。$list['tweetBody'].

; echo“

推特:”.$list['datePosted']。'Retweet:Like:have:

”; 回声'; }
这适用于那些不理解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来防止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编码)

阿贾克斯:


由于您的readystate错误代码为4,状态为500,因此我认为问题更多地与MYSQLi的兼容性有关,或者与数据库设置表的方式有关

有关标题的更多信息,请查看此帖子:

可能是它出错了,所以当xmlhttp.readyState==4但xmlhttp.status不是200时,您应该有一个分支来处理,然后打印出该状态,这样您就可以计算出problem@developerwjk我不太明白你的意思。我的if语句检查以确保它们都是我想要的。我的字符串“yay”正在打印到控制台上。因此readystate为4,状态为200。如果服务器出现内部错误并返回状态500,该怎么办。您将获得readystate 4状态500,并且您没有在上面打印任何内容,因此您不会know@developerwjk有道理。我修改了我的语句,使其看起来像
if(xmlhttp.readyState==4&&xmlhttp.status==200){console.log(“yay”);}else-if(xmlhttp.status==500){console.log(“内部错误”);}else{console.log(“未知错误”);}
对于用于AJAX的PHP文件,您不应该使用mysqli错误报告。我想我应该提到这一点。好吧,在我的PHP脚本中,你会看到我想如何创建一个div。然而,我从服务器得到的响应只是纯文本,例如:我如何让它像我在页面中嵌入PHP一样输出一个div?你所要做的就是设置你的内容类型:
xmlhttp.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
getall('table',
    Array(
          '*'
     ),
     null, 5, null);
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));