Javascript Ajax读取PHP生成的json

Javascript Ajax读取PHP生成的json,javascript,php,ajax,json,Javascript,Php,Ajax,Json,所以我想向ajax调用发送一个json,但我不知道在发送时如何读取json。而且我的json看起来很奇怪,因为反斜杠 这是我的ajax: function find(){ var type = $('#object_type').val(); $.ajax({ type : 'POST', url : 'get_user.php', data : {

所以我想向ajax调用发送一个json,但我不知道在发送时如何读取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);
如techierishi的答复所述。不要对你的回答进行两次编码。照办

 echo $result;
JSON应该是有效的并被解析,为什么

json_encode用于从MySQLi查询返回的有效PHP数组。 使用dataType,显式地强制jQuery解析响应,并且在该过程中不会出现任何错误。 返回的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

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

$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);

}

这个回答可能是正确的。但它是这样呈现的。如果您在浏览器中查看开发工具F12,您可以在“网络”选项卡中看到实际的响应文本。Mah我不知道它是否真的存在,我了解到此反斜杠可能会导致问题..而且无论如何,我不知道如何访问json中的数据..尝试在成功函数中执行此操作,看看它是否有效:alertresponse[0].name我使用FireBug,HTML中的响应与我在问题中所写的响应相同。除了手头的主要问题之外,您可能应该添加内容类型标题“content-type:application/json”;。虽然不是必需的,但最好明确说明这一点。有关更多详细信息,请参阅…如果我执行var name=response[0]。name;然后alertname,我得到了UndefinedSee Techierishi的答案和我对答案所做的适当编辑。