鍍金池/ 問答/PHP  HTML/ php返回數(shù)組給ajax出錯

php返回數(shù)組給ajax出錯

我通過php生成了一個數(shù)組,并echo回去,ajax進(jìn)入error(ajax的datatype設(shè)為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) {
         //生成空數(shù)組
            $backresults=array();
            for($i=0;$i<$num_results;$i++){
                $row = $result->fetch_assoc();
         //遍歷選項并將信息寫入數(shù)組中
                array_push($backresults,array("name"=>$row['name'],"singer"=>$row['singer'],"address"=>$row['address']));
            };
         //返回給ajax該數(shù)組
             echo(json_encode($backresults));
        } else {
            echo "抱歉,本站暫時未收錄該樂譜。";
        }
        $conn->close();
    ?>

chrome瀏覽器收到的數(shù)據(jù)是:

[{"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

說明進(jìn)入了error。
我覺得如果echo的是一個json對象應(yīng)該就能解決問題。
請教一下如何解決?

回答
編輯回答
冷咖啡

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

2017年6月29日 18:57
編輯回答
墨沫

echo之前加一下header

header('Content-type: application/json');
echo(json_encode($backresults));
...
2018年5月27日 19:04
編輯回答
瘋浪

我一般都會寫成:

json_encode($backresults, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

這樣的形式,處理一下編碼的JSON。其它的暫時沒看出來有什么問題。


具體含義參考JSON預(yù)定義常量

2018年7月22日 12:32
編輯回答
命于你

我猜你這個可能是隊列的問題
因為再ajax中,可能你的請求還未得到服務(wù)器的相應(yīng),就執(zhí)行了下面的語句
你可以試試設(shè)置 async:flase -> 等待服務(wù)器端返回數(shù)據(jù)再執(zhí)行

2017年12月17日 20:50