繁体   English   中英

如何使用JavaScript遍历php中的JSON编码对象

[英]How to iterate through JSON encoded object in php using javascript

我正在尝试使用以下方法获取来自php的数据:

echo json_encode($rows);

当我注释掉数据类型:'json'时,我可以看到正常编码的json字符串,但是当我使用它时,警报会向我显示对象数组。 当我尝试获取该对象数组的长度时,我得到1,但其中应该超过20个项目。 我尝试在此处进行搜索,并尝试了遍历json的不同操作,但由于某种原因,这些都不对我有用。 我正在使用

mysqli_set_charset($connect, "utf8");

在我对PHP的选择语句之前。 这是我的ajax电话:

function search() {
    $.ajax(
    {
      url: "getFiles.php",
      dataType: 'json',
      type: "POST",
      data: {Filter: $("#txtSearch").val()},
      cache: false,
      async: false,
      success: function(data)
      {
        var jsonData = JSON.parse(data);
        alert(data);
        $.each(data, function(index, val)
          {
            alert(val.iddocuments);
            alert(val.docName);
            alert(val.fileName);
            alert(val.fl1);  
            alert(val.dateModified);   
          });   
      }
    });         
  }  

问题在于您使用json_encode()在PHP方面:

http://php.net/manual/zh/function.json-encode.php

引用函数定义:“字符串json_encode(混合$ value [,int $ options = 0 [,int $ depth = 512]])”,以下内容:

<?php
echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>

将输出以下内容:

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

JSON_FORCE_OBJECT(整数)当使用非关联数组时,输出对象而不是数组。 当输出的接收者期望对象并且数组为空时,此功能特别有用。 自PHP 5.3.0起可用。

类似的“简写”版本为:

json_encode($d, true);

还值得一提的是,应在回显输出数据之前设置正确的输出头:

header('Content-Type: application/json');

最终 ,如果您使用的是PHP 5.4或更高版本( 应该是),则实现JsonSerializable接口是最好的选择,因为从JSON的角度来看,它允许更灵活地表示数据。

问题可能与您序列化为json格式的数组的结构有关。 使用PHP中的var_dump($rows)进行检查,以查看确切的结构,并且该结构应与客户端上使用的结构(在JavaScript代码中)相匹配。

在客户端,您可以进行一些调试以准确了解所接收内容的结构,例如,调用success函数中的console.log(data) 无论如何,必须在服务器端添加标header('Content-Type: application/json'); 并在客户端添加dataType: 'json',以便jQuery知道如何解析数据并将其作为JavaScript数组提供给您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM