鍍金池/ 問(wèn)答/PHP  HTML/ php返回?cái)?shù)組給ajax出錯(cuò)

php返回?cái)?shù)組給ajax出錯(cuò)

我通過(guò)php生成了一個(gè)數(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();
         //遍歷選項(xiàng)并將信息寫(xiě)入數(shù)組中
                array_push($backresults,array("name"=>$row['name'],"singer"=>$row['singer'],"address"=>$row['address']));
            };
         //返回給ajax該數(shù)組
             echo(json_encode($backresults));
        } else {
            echo "抱歉,本站暫時(shí)未收錄該樂(lè)譜。";
        }
        $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"}]

同時(shí)console.log打印

readyState: 4
error

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

回答
編輯回答
冷咖啡

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

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

echo之前加一下header

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

我一般都會(huì)寫(xiě)成:

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

這樣的形式,處理一下編碼的JSON。其它的暫時(shí)沒(méi)看出來(lái)有什么問(wèn)題。


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

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

我猜你這個(gè)可能是隊(duì)列的問(wèn)題
因?yàn)樵賏jax中,可能你的請(qǐng)求還未得到服務(wù)器的相應(yīng),就執(zhí)行了下面的語(yǔ)句
你可以試試設(shè)置 async:flase -> 等待服務(wù)器端返回?cái)?shù)據(jù)再執(zhí)行

2017年12月17日 20:50