如何将 AJAX 结果读取为数组而不是字符串


how to read ajax results as an array instead of a string

环境: PHP 5.3.5 MySQL Server 5.5.8

创建了我的第一个 ajax 调用,经过很多决心,我得到了结果。结果似乎以字符串形式返回。当我请求时

alert(result[0]);

我只返回一个字符。

如果我尝试使用字段名称,则返回的值为 undefined。

这是我的AJAX的javascript:

$.ajax({ 
    type: "POST", 
    url: "models/ajaxHandler.php", 
    data: "handler=this&stu=21", 
    success: function(result){ 
            if (result !== null) 
            { 
                    alert(result + " " + result[0] +" " result['firstname']);  
                    var obj =  JSON && JSON.parse(result) || $.parseJSON(result);
                    alert(obj + " " + obj[0] + " " + obj['firstname']);
            } 
            ShowDialog(false); 
            e.preventDefault(); 
    }, 
    error: function()
    { 
            alert("ajax failure"); 
    } 
});

因此,一旦使用PHP中的PDO连接捕获结果,就可以使用fetchAll()与mysql进行捕获。我从 php 返回的结果,如下所示:

echo json_encode($results);

结果的警报

返回如下:

[{"名字":" 测试","0":" 测试","姓氏":" 一","1":" 一","id":"2","2":"2","st_usage_id":空,"3":空},{"名字":" 先生","0":" 先生","姓氏":" 二","1":" 两个","id":"3","2":"3","st_usage_id":空,"3":空},{"名字":" 先生","0":" 先生","姓氏":" 三","1":" 三","id":"5","2":"5","st_usage_id":空,"3":空}] [ 未定义

JSON 的解析将所有结果作为对象返回。

我还尝试使用以下方法在 php 中返回结果:

print_r(json_encode($results));

它显示上面的相同字符串。最后我用了

$var_dump(results);

这将返回以下内容:

array(3) {
  [0]=>
  array(8) {
    ["firstname"]=>
    string(7) " DrTest"
    [0]=>
    string(7) " DrTest"
    ["lastname"]=>
    string(4) " One"
    [1]=>
    string(4) " One"
    ["user_public_info_id"]=>
    string(1) "2"
    [2]=>
    string(1) "2"
    ["st_usage_id"]=>
    NULL
    [3]=>
    NULL
  }
  [1]=>
  array(8) {
    ["firstname"]=>
    string(3) " Dr"
    [0]=>
    string(3) " Dr"
    ["lastname"]=>
    string(4) " Two"
    [1]=>
    string(4) " Two"
    ["user_public_info_id"]=>
    string(1) "3"
    [2]=>
    string(1) "3"
    ["st_usage_id"]=>
    NULL
    [3]=>
    NULL
  }
  [2]=>
  array(8) {
    ["firstname"]=>
    string(3) " Dr"
    [0]=>
    string(3) " Dr"
    ["lastname"]=>
    string(6) " Three"
    [1]=>
    string(6) " Three"
    ["user_public_info_id"]=>
    string(1) "5"
    [2]=>
    string(1) "5"
    ["st_usage_id"]=>
    NULL
    [3]=>
    NULL
  }
}
 a undefined

不确定我错过了什么,我确信这是简单的事情。我觉得我已经尝试了一切。请问有人可以告诉我我哪里出错了?

指定 json 数据类型。

dataType: "json"

请注意,结果永远不会在最新版本的jQuery中null,相反,如果没有任何返回,它将出错。

如果您想接受答案:

尝试:

alert(obj[0]['firstname']);

将"results = $.parseJSON(result);"添加到成功调用的开头,它应该将其转换为Javascript对象。

PHP 文档 http://php.net/manual/en/function.json-decode.php 指出,当 json_decode 的第二个参数为 true 时,"返回的对象将被转换为关联数组"。

这应该为您完成:

$results = json_decode(json_encode($results), true);
print_r($results);