Ajax读取PHP生成的json

时间:2015-08-10 13:23:56

标签: javascript php ajax json

所以我想将一个json发送到一个ajax调用,但我不知道如何在发送时读取json。而且由于反斜杠,我的json看起来很奇怪......

这是我的ajax:

    function find(){
        var type = $('#object_type').val();
            $.ajax({
                type : 'POST',
                url : 'get_user.php',
                data : {
                    'type' : type
                },
                dataType : 'json',
                error : function(response){
                    alert('SOMETHING WENT WRONG');
                },
                success : function(response){

This is what I get as a response:
"[{\"name\":\"Test\",\"link\":\"test.php\"},{\"name\":\"Test2\",\"link\":\"test2
.php\"}]"
                }
            });     
    }

这是我的PHP函数:

    $type = $_POST['type'];
    $user_array;
    $user = mysqli_query($conn, "SELECT name,link FROM user WHERE `type` LIKE '%".$type."%'") or die();

            while ($row = mysqli_fetch_array($user, MYSQLI_ASSOC)) {

                $row_array['name'] = $row['name'];
                $row_array['link'] = $row['link'];
                array_push($user_array, $row_array);
            }
        mysqli_close($conn);
        $result = json_encode($user_array, 128);
        echo json_encode($result);

2 个答案:

答案 0 :(得分:4)

正如 techierishi 的回答所述。不要对您的回复进行两次编码。只是做

 echo $result;

JSON应该有效并解析,为什么?

  • json_encode用于从MySQLi查询返回的有效PHP数组。
  • 使用
  • dataType,明确强制jQuery到JSON.parse响应,并且在该过程中没有出现错误。

返回的JSON具有以下结构

ROOT
   ARRAY
       ARRAY OBJECT
             OBJECT PROPERTY 

解决类似问题:

root[array index].property

会给你数组的值,这是一个对象。该对象具有多个属性。

[]表示阵列
{}表示对象

所以[{name:"value 1"},{name:"value 2"}]实际上是

ARRAY
   [0].name = value 1
   [1].name = value 2

因此,从JSON中检索名称等信息将是:

response[0].name; // = test

答案 1 :(得分:4)

你应该做的第一个改变: 您不需要编码两次

$result = json_encode($user_array, 128);
echo json_encode($result);

应该是

 $result = json_encode($user_array, 128);
 echo $result;

现在响应看起来像

[{"name":"Test","link":"test.php"},{"name":"Test2","link":"test2
.php"}]

这是一个有效的Javascript数组,可以使用以下代码访问:

var len = response.length;
for(i=0;i<len;i++){

  console.log(response[i].name);
  console.log(response[i].link);

}