【问题标题】:how to read ajax results as an array instead of a string如何将ajax结果作为数组而不是字符串读取
【发布时间】:2013-09-11 19:50:33
【问题描述】:

环境:PHP 5.3.5 MySQL 服务器 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);

结果返回的警报如下:

[{"firstname":"Test","0":"Test","lastname":"One","1":" 一个","id":"2","2":"2","st_usage_id":null,"3":null},{"firstname":" 先生","0":"先生","姓氏":"二","1":" 两个","id":"3","2":"3","st_usage_id":null,"3":null},{"firstname":" 先生","0":"先生","姓氏":"三","1":" 三","id":"5","2":"5","st_usage_id":null,"3":null}] [未定义

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

我不确定我错过了什么,但我确信这很简单。我觉得我已经尝试了一切。请问谁能告诉我哪里出错了?

【问题讨论】:

  • 我也尝试使用以下 sn-ps 遍历结果。结果总是返回 undefined (indefinitly) $.each(result, function (i, elem) { alert(elem.firstname); });
  • alert(obj[0]['firstname'])
  • 这是另一个尝试:result.foreach(function(entry){ alert(entry); });
  • 也试过了。第二个警报不起作用。
  • 谢谢。这确实是问题所在。我将 obj 的元素作为单个数组项访问。

标签: php jquery ajax


【解决方案1】:

指定 json 数据类型。

dataType: "json"

注意,在最新版本的 jQuery 中,结果永远不会是 null,而是在没有返回任何内容的情况下会出错。

【讨论】:

  • 它做了什么?这绝对应该使 result 成为一个数组而不是一个字符串。
  • Kevin,dataType 是区分大小写的单词,因此被捕获并显示错误消息。如果我使用 echo ($results) 返回结果,则上面详细介绍了 ajax 中的结果。当我尝试 var obj = $.parseJJSON(result);输出是 [object Object]。如果我删除它,结果是一样的。我没有使用双精度数组来访问数组的唯一元素。如果没有返回任何内容,我认为您的观点是我将定义数据类型。谢谢。
  • 如果你收到[object Object],那么它就可以工作了。 alert(result[0].firstname)
【解决方案2】:

如果您想接受答案:

试试:

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

【讨论】:

    【解决方案3】:

    添加“结果 = $.parseJSON(result);”到你成功调用的开头,它应该把它变成一个 Javascript 对象。

    【讨论】:

      【解决方案4】:

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

      这应该为你做:

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

      【讨论】:

      • 这似乎是多余的。我不明白您为什么建议对结果进行编码而不是对其进行解码。这不只是撤销所做的事情吗?无论如何,结果是我没有将 Ajax 返回的结果视为双数组。
      • @user2672744 你试过了吗?
      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 2021-09-20
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多