AJAX代码似乎还可以,但是什么也没显示

时间:2019-09-28 16:06:43

标签: php jquery ajax

因此,我进行了实时聊天,当用户单击按钮时,此功能应开始生效,并将其插入数据库和HTML对话部分。 第一个问题是,如果我使用dataType: "json",那么它将进入AJAX error 案例而不是成功。但是,如果我将其拉出,如下所示,它将进入成功情况。但是这里出现了第二个问题:仅显示第一个警报,并且如果我尝试警报响应,它什么也不会显示(+也不会显示 alert('yes'))。

function sendMessage(to_user_id) {
    message = $(".message-input input").val();
    $('.message-input input').val('');
    if($.trim(message) == '') {
        return false;
    }
    $.ajax({
        url:"chat_action.php",
        method:"POST",
        data:{to_user_id:to_user_id, chat_message:message, action:'insert_chat'},
        success:function(response) { 
            alert('no'); 
            var resp = JSON.parse(response);            
            $('#conversation').html(resp.conversation);             
            $(".messages").animate({ scrollTop: $('.messages').height() }, "fast");
            alert('yes');
        },
    }); 
}

EDIT1:

了解我的文件可能会很有用: 我有 index.php ,其中包含实际的聊天记录。单击发送按钮后,它将访问包含上面脚本的 chat.js 文件。然后,这是 chat_action.php 的一部分,进行处理并将其进一步传递给 Chat.php

chat_action.php

session_start();
include ('Chat.php');
$chat = new Chat();
if($_POST['action'] == 'insert_chat') {
    $chat->insertChat($_POST['to_user_id'], $_SESSION['userid'], $_POST['chat_message']);
}

Chat.php

<?php
class Chat{
    private $host  = 'localhost';
    private $user  = 'root';
    private $password   = "";
    private $database  = "chat_demo";      
    private $chatTable = 'chat';
    private $chatUsersTable = 'chat_users';
    private $chatLoginDetailsTable = 'chat_login_details';
    private $dbConnect = false;
    public function __construct(){
        if(!$this->dbConnect){ 
            $conn = new mysqli($this->host, $this->user, $this->password, $this->database);
            if($conn->connect_error){
                die("Error failed to connect to MySQL: " . $conn->connect_error);
            }else{
                $this->dbConnect = $conn;
            }
        }
    }
public function insertChat($reciever_userid, $user_id, $chat_message) {     
        $sqlInsert = "
            INSERT INTO ".$this->chatTable." 
            (reciever_userid, sender_userid, message, status) 
            VALUES ('".$reciever_userid."', '".$user_id."', '".$chat_message."', '1')";
        $result = mysqli_query($this->dbConnect, $sqlInsert);
        if(!$result){
            return ('Error in query: '. mysqli_error($this->dbConnect));
        } else {
            $conversation = $this->getUserChat($user_id, $reciever_userid);
            $data = array(
                "conversation" => $conversation         
            );
            echo json_encode($data);    
        }
    }
    public function getUserChat($from_user_id, $to_user_id) {
        $fromUserAvatar = $this->getUserAvatar($from_user_id);  
        $toUserAvatar = $this->getUserAvatar($to_user_id);          
        $sqlQuery = "
            SELECT * FROM ".$this->chatTable." 
            WHERE (sender_userid = '".$from_user_id."' 
            AND reciever_userid = '".$to_user_id."') 
            OR (sender_userid = '".$to_user_id."' 
            AND reciever_userid = '".$from_user_id."') 
            ORDER BY timestamp ASC";
        $userChat = $this->getData($sqlQuery);  
        $conversation = '<ul>';
        foreach($userChat as $chat){
            $user_name = '';
            if($chat["sender_userid"] == $from_user_id) {
                $conversation .= '<li class="replies">';
                $conversation .= '<img width="22px" height="22px" src="userpics/'.$fromUserAvatar.'" alt="" />';
            } else {
                $conversation .= '<li class="sent">';
                $conversation .= '<img width="22px" height="22px" src="userpics/'.$toUserAvatar.'" alt="" />';
            }           
            $conversation .= '<p>'.$chat["message"].'</p>';         
            $conversation .= '</li>';
        }       
        $conversation .= '</ul>';
        return $conversation;
    }
private function getData($sqlQuery) {
        $result = mysqli_query($this->dbConnect, $sqlQuery);
        if(!$result){
            die('Error in query: '. mysqli_error($this->dbConnect));
        }
        $data= array();
        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
            $data[]=$row;            
        }
        return $data;
    }
    public function getUserAvatar($userid){
        $sqlQuery = "
            SELECT avatar 
            FROM ".$this->chatUsersTable." 
            WHERE userid = '$userid'";
        $userResult = $this->getData($sqlQuery);
        $userAvatar = '';
        foreach ($userResult as $user) {
            $userAvatar = $user['avatar'];
        }   
        return $userAvatar;
    }   
}

EDIT2:

从控制台:

chat.js:106

index.php:1未捕获的SyntaxError:JSON输入意外结束

at JSON.parse (<anonymous>)
at Object.success (chat.js:107)
at j (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at x (jquery.min.js:4)
at XMLHttpRequest.<anonymous> (jquery.min.js:4)

1 个答案:

答案 0 :(得分:0)

您尝试解析无效的json,请在您的js中尝试以下操作:

function sendMessage(to_user_id) {
    message = $(".message-input input").val();
    $('.message-input input').val('');
    if($.trim(message) == '') {
        return false;
    }

    $.ajax({
        url:"chat_action.php",
        method:"POST",
        data:{to_user_id:to_user_id, chat_message:message, action:'insert_chat'},
        success:function(response) { 
            alert('no');
            try {
                var resp = JSON.parse(response);            
                $('#conversation').html(resp.conversation);             
            } catch(e) { alert(e) }

            $(".messages").animate({ scrollTop: $('.messages').height() }, "fast");
            alert('yes');
        },
    }); 
}