Невозможно вернуть html с контроллера, используя Ajax вызовы в приложении чата - PullRequest
0 голосов
/ 29 апреля 2020

Итак, я создаю интегрированное приложение чата в CRM. Всякий раз, когда вошедший в систему пользователь нажимает на контакт, он отображает историю чата между обоими пользователями, используя вызовы Ajax, и именно здесь начинаются проблемы.

Итак, вот мой Ajax Код вызова:

function GetChatHistory(receiver_id){
    $.ajax({
              dataType : "json",
              url: '/chat/get_chat_history_by_user',
              data:{receiver_id:receiver_id},
              success:function(data)
              {

                  $('#chathistory').html(data);
                  ScrollDown();  
              },
              error: function (jqXHR, status, err) {
                  // alert('Local error callback');
                  alert("error fetching")
              }
         });
}

Это мой контроллер

public function get_chat_history_by_user(){
        //get the receiver id
        $receiver_id = $this->input->get('receiver_id');
        //get the sender id
        $Logged_sender_id = $this->session->userdata['user_id'];

        $history = $this->chat_model->GetReciverChatHistory($receiver_id);

        foreach($history as $chat):

            $message_id = $chat['id'];
            $sender_id = $chat['sender_id'];
            $userName = $this->UserModel->GetName($chat['sender_id']);
            $userPic = $this->UserModel->PictureUrlById($chat['sender_id']);

            $messagebody = $chat['message'];
            $messagedatetime = date('d M H:i A',strtotime($chat['message_date_time']));
      ?>
           <?php if($Logged_sender_id!=$sender_id){?>     
                  <!-- Message. Default to the left -->
                    <div class="direct-chat-msg">
                      <div class="direct-chat-info clearfix">
                        <span ><?=$userName;?></span>
                        <span ><?=$messagedatetime;?></span>
                      </div>
                      <!-- /.direct-chat-info -->

                      <div class="direct-chat-text">
                         <?=$messageBody;?>
                      </div>
                      <!-- /.direct-chat-text -->

                    </div>
                    <!-- /.direct-chat-msg -->
            <?php }else{?>
               <!-- Message to the right -->
                    <div class="direct-chat-msg right">
                      <div class="direct-chat-info clearfix">
                        <span ><?=$userName;?></span>
                        <span ><?=$messagedatetime;?></span>
                      </div>
                      <!-- /.direct-chat-info -->

                      <div class="direct-chat-text">
                        <?=$messageBody;?>
                       </div>
                       <!-- /.direct-chat-text -->
                    </div>
                    <!-- /.direct-chat-msg -->
             <?php }?>

       <?php
        endforeach;
 }

простая версия представления и div, который я хочу вставить данные в нем:

<div id="chathistory"></div>

Обратите внимание, что модели написаны правильно (я проверил их), и вызов написан правильно, потому что всякий раз, когда я удаляю foreach l oop и добавляю это в мой контроллер :

echo json_encode($history);

и затем консоль записывает данные в мой ajax звонок. Я получаю полную историю чата без проблем. так что я думаю, что что-то не так с foreach l oop и рендерингом html!

ТАКЖЕ: я просмотрел простой чат с веб-приложением на github, и они написали контроллер таким же образом, и он прекрасно работал для них. Так в чем проблема, пожалуйста?

1 Ответ

1 голос
/ 29 апреля 2020
dataType : "json" 

говорит jQuery ожидать JSON в ответе, но вы возвращаете HTML из контроллера. Поэтому он, скорее всего, выдаст ошибку, когда попытается проанализировать ваш HTML как JSON. Либо удалите эту строку, либо укажите

dataType: "html" 

вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...