如何使用javascript迭代PHP中的JSON编码对象

时间:2017-01-31 16:56:20

标签: javascript php jquery ajax

我试图通过以下方式获取来自php的数据:

echo json_encode($rows);

当我注释掉数据类型时:' json'我可以看到正常编码的json字符串,但是当我使用它时,alert会显示我的对象数组。当我试图获得该对象数组的长度时,我得到1,但它应该超过20个项目。我尝试在这里做搜索帖子并尝试通过json迭代不同的东西,但由于某些原因,这些都不适用于我。我正在使用

mysqli_set_charset($connect, "utf8");

在php端的select语句之前。这是我的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);   
          });   
      }
    });         
  }  

2 个答案:

答案 0 :(得分:1)

问题出在PHP方面,你使用了json_encode():

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

引用函数定义:“string json_encode(mixed $ 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 Interface是最好的选择,因为它允许从JSON角度更灵活地表示您的数据。

答案 1 :(得分:1)

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

在客户端,您可以进行一些调试,以便在console.log(data)函数中查看您正在接收的内容的结构,例如调用success。 在任何情况下,在服务器端,您必须添加标头header('Content-Type: application/json');,并在客户端添加dataType: 'json',,以便jQuery知道如何解析数据并使您可以作为JavaScript数组使用。< / p>