【问题标题】:Invalid json response in jquery datatablejquery数据表中的无效json响应
【发布时间】:2017-04-04 21:02:59
【问题描述】:

我第一次尝试使用 jquery 数据表。在参考手册等后,我能够编写下面的程序,但我不断收到错误消息,指出 json 响应无效。

模型文件:

public function inbox($data)
     {
        $con = mysqli_connect("localhost", "root", "","mailman");

        $sentFromEmail = $data['sentFromEmail'];

        $querySender = "SELECT userId FROM users WHERE userEmail= '$sentFromEmail'";
        $resSender = mysqli_query($con, $querySender);
        $rowSender = mysqli_fetch_assoc($resSender);
        $columnSender = $rowSender["userId"]; 


        $querySender = "SELECT mailId,mailSender,mailSubject,mailContent, mailSendDate FROM mails WHERE mailReceiver = '$columnSender'";
        $resSender = mysqli_query($con, $querySender);
        $rowSender = mysqli_fetch_assoc($resSender);

        $myMail = array();
        $test = array();
        while($row = mysqli_fetch_array($resSender))     
        {
            $senderId = $row['mailSender'];

            $querySenderName = "SELECT userName FROM users WHERE userId= '$senderId'";
            $resSenderName = mysqli_query($con, $querySenderName);
            $rowSenderName = mysqli_fetch_assoc($resSenderName);
            $columnSenderName = $rowSenderName["userName"]; 

            $test[] = $row;
            $myMail[] = array(
                'mailId' => $row['mailId'],
                'mailSender' => $columnSenderName,
                'mailSubject' => $row['mailContent'],
                'mailContent' => $row['mailSubject'],
                'mailSendDate' => $row['mailSendDate']
                );

            // $myMailData = json_encode($test);
            // echo $myMailData;
        }

        return $test;
    }        

控制器:

public function index()
    {
        //$userLoginData = $this->session->userdata('user_login');

        $data = array(
            'sentFromEmail' => $this->session->userdata['user_login']['loginEmail']     ,

            );  

        //load the method of model  
        $mailBoxData = array();
        $mailBoxData['mailBoxData'] = $this->mail_receive->inbox($data);

        $jsonData = json_encode($mailBoxData);

        echo $jsonData;

        $this->load->view('inbox', $mailBoxData);

    }

查看文件:

<script>
    $(document).ready(function() {
        $('#inbox').dataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url" : "http://localhost/codeigniter/index.php/Inbox_redirect/index",
            "type" : "POST",
            "dataSrc": ""
        },
        "columns" : [ 
            {"data" : "mailId"},
            {"data" : "mailSender"},
            {"data" : "mailSubject"},
            {"data" : "mailContent"},
            {"data" : "mailSendDate"} ]

    } );
} );
</script>

<table class="table table-hover table-striped" id="inbox" name="inbox">
                                  <thead>
                                        <th>ID</th>
                                        <th>Sent By:</th>
                                        <th>Time</th>
                                        <th>Subject</th>
                                        <th>Message</th>
                                    </thead>
                                    <div class="container">
                                    <tbody>


                                    </tbody> 
                                    </div>
                                </table>

如何纠正错误?

得到记录的json响应是

[{"mailId":"13","mailSender":"nikita","mailSubject":"testing","mailContent":"njcndncvjdvnfjvnfvnfjvnjkfnvkfnbkfkbnfdbteb","mailSendDate":"2016-11-16 15:04:20"},{"mailId":"14","mailSender":"nikita","mailSubject":"testing","mailContent":"njcndncvjdvnfjvnfvnfjvnjkfnvkfnbkfkbnfdbteb","mailSendDate":"2016-11-16 15:23:02"},{"mailId":"17","mailSender":"nikita","mailSubject":"wygdyegfhfbvhrvf","mailContent":"ghfgregughuthgujbhjhykhytj","mailSendDate":"2016-11-17 12:55:20"},{"mailId":"21","mailSender":"jyotsna","mailSubject":"hi there","mailContent":"hello, how are you?","mailSendDate":"2016-11-18 14:50:56"}]

【问题讨论】:

  • 尝试不带键的数组,例如 $myMail[] = array('mailId' => $row['mailId'],'mailSender' => $columnSenderName,.....); to $myMail[] = array($row['mailId'],$columnSenderName .....);
  • 它的用途是什么? json 响应被正确记录,但数据表调用无法获得有效的 json 响应。另外,没有键的数组是没有意义的
  • 为什么还要打印 json 数据并加载视图?它混合了两种内容,使 json 无效。
  • 我认为@phobia82 是正确的。你应该删除echo $jsonData;
  • 那是检查我的模型是否正确处理数据,主要是为了测试目的

标签: php jquery json codeigniter datatables


【解决方案1】:

尝试在里面添加“dataType”:

"ajax": {
    "url" : "http://localhost/codeigniter/index.php/Inbox_redirect/index",
    "type" : "POST",
    "dataSrc": ""
}

像这样:

"ajax": {
    "url" : "http://localhost/codeigniter/index.php/Inbox_redirect/index",
    "type" : "POST",
    "dataType": "json", // The type of data that you're expecting back from the server.
    "dataSrc": ""
}

如果这不起作用,您仍然可以尝试解析得到的结果:JSON.parse('your JSON string');。您从 PHP 发送的 JSON 字符串,使用 json_encode() 方法生成。

【讨论】:

  • 解决方案是在控制器中我使用 echo json_encode($mailBoxData);那行得通。无论如何,谢谢!
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2017-09-23
  • 2021-11-28
  • 1970-01-01
  • 2019-07-31
  • 2016-10-31
相关资源
最近更新 更多