php返回数组给ajax出错

我通过php生成了一个数组,并echo回去,ajax进入error(ajax的datatype设为json),我推断原因在于返回的不是json格式。

求大神帮看看,感谢!

ajax部分:

$("#ricotext").keyup(function(){
                $.ajax({
                  type:"post",
                  url:"search.php",
                  dataType:"json",
                  data:{search:$("#ricotext").val()},
                  success:function(feedbackdata)
                    {
                      console.log(feedbackdata);
                      console.log(success);
                    },
                  error:function(feedbackdata)
                    {
                      console.log(feedbackdata);
                      console.log(error);
                    },
                });
            });

php部分:

<?php
        $servername = "localhost";
        $username = "root";
        $password = "root";
        $dbname = "guitartabs";
        $search=$_POST["search"];
         
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("连接失败: " . $conn->connect_error);
        } 
         
        $sql = "SELECT * FROM tabs where name like '%$search%' OR singer like '%$search%'";
        $result = $conn->query($sql);
         
        $num_results = $result->num_rows;

        if ($result->num_rows > 0) {
         //生成空数组
            $backresults=array();
            for($i=0;$i<$num_results;$i++){
                $row = $result->fetch_assoc();
         //遍历选项并将信息写入数组中
                array_push($backresults,array("name"=>$row['name'],"singer"=>$row['singer'],"address"=>$row['address']));
            };
         //返回给ajax该数组
             echo(json_encode($backresults));
        } else {
            echo "抱歉,本站暂时未收录该乐谱。";
        }
        $conn->close();
    ?>

chrome浏览器收到的数据是:

[{"name":"NightWish","singer":"NightWish","address":"uploads\/NightWish.gp5"},{"name":"night","singer":"rico","address":"uploads\/MultiTrack.gp5"},{"name":"nightbar","singer":"ricoq","address":"uploads\/Serenade.gp5"}]

同时console.log打印

readyState: 4
error

说明进入了error。
我觉得如果echo的是一个json对象应该就能解决问题。
请教一下如何解决?

扬帆大鱼
浏览 485回答 4
4回答

呼如林

echo之前加一下header header('Content-type: application/json'); echo(json_encode($backresults)); ...

三国纷争

echo (json_encode($backresults));eixt();或者return json_encode($backresults),我自己一般都是return $backresults,然后console.log()就是个对象,也方便处理

动漫人物

我猜你这个可能是队列的问题因为再ajax中,可能你的请求还未得到服务器的相应,就执行了下面的语句你可以试试设置 async:flase -> 等待服务器端返回数据再执行

潇潇雨雨

我一般都会写成: json_encode($backresults, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); 这样的形式,处理一下编码的JSON。其它的暂时没看出来有什么问题。 具体含义参考JSON预定义常量
打开App,查看更多内容
随时随地看视频慕课网APP