【问题标题】:Getting undefined while displaying the JSON response in the table在表中显示 JSON 响应时未定义
【发布时间】:2018-12-02 01:11:11
【问题描述】:

我在表格中显示 JSON 响应,但我收到 undefined。我正在从数据库中获取一条或多条记录。我在警报中得到了正确的输出。 控制器

if (count($result) > 0) {
            foreach ($result as $row){
                $arr_result[] = $row->first_name .', '. $row->last_name .', '. $row->phone .', '.$row->chss_no;  
             }
                echo json_encode($arr_result);
            }

阿贾克斯

submitHandler: function(form) {
        var cust_name = $('#cust_name').val();
        var mobile_no = $('#mobile').val();                             
        $.ajax({
            url: baseUrl + "/Search/get_search_result",
            method: "POST",
            data: {cust_name: cust_name,mobile_no:mobile_no},
            success: function(response) {
                var data = JSON.parse(response);
                var trHTML = '';
                    $.each(data, function (i, o){
                    trHTML += '<tr><td>' + o.first_name +
                             '</td><td>' + o.last_name +
                             '</td><td>' + o.phone +
                             '</td></tr>';
                          });
                  $('.search_record tbody').append(trHTML);
           }
       });

    }

表格

<div class="search_record" >      
   <table id="" class="table table-bordered table-striped">
                <thead>
                    <tr>  
                    <th>Firstname</th>
                    <th>Lastname</th>
                    <th>Mobile</th>
                  </tr>
                 </thead>            
                <tbody> 

                </tbody>
            </table>
            </div>

我得到了输出

alert(response)

[
    "Praveen, , 2121212121, jbhdbdhdb",
    "Praveen, Sharma, 9898981234, 09\/ACDE10",
    "Praveen, Sharma, 9898981234, 09\/ACDE10",
    "Praveen, Sharma, 9898981234, 09\/ACDE10"
]

在表格输出中

【问题讨论】:

  • 是字符串类型的吗?在console.log() 中检查它,它应该是数组而不是字符串。
  • 您的数组是字符串数组,而不是对象数组。没有密钥,因为您正在尝试引用它们。看看你的 json。
  • 你只有一个简单的字符串数组,而不是对象。数组中的任何地方都没有 first_name、last_name 或 phone 属性。甚至没有一个对象可以具有这样的属性 - 从您的 response 数据中很容易看出这一点。也许您不了解您的数据?你想象这些领域是从哪里来的?他们不能只是通过魔法出现。最好的办法是更改您的服务器端代码,使其以更结构化的 JSON 格式输出数据。
  • 你应该在/Search/get_search_result 中修复这个问题,否则修复会变得很糟糕。
  • @user9437856 我已经发布了一个答案,我假设这是服务器上的 PHP,它看起来像它(我修改了标签)。 Adder 意味着如果你尝试在 JavaScript 中修复这个问题,你最终会得到更复杂和丑陋的代码,因为你必须将每个数组字符串分成几部分来找到单独的值,这比仅仅拥有一个正确的对象结构更混乱开始。

标签: php jquery html json ajax


【解决方案1】:

你只有一个简单的字符串数组,而不是对象。数组中的任何地方都没有 first_name、last_name 或 phone 属性。甚至没有一个对象可以具有这样的属性 - 从您的响应数据中很容易看出这一点。

最好的办法是更改您的服务器端代码,使其以更结构化的 JSON 格式输出数据:

$arr_result = array();

if (count($result) > 0)
{
  foreach ($result as $row)
  {
    $arr_result[] = array(
      "first_name" => $row->first_name,
      "last_name" => $row->last_name,
      "phone" => $row->phone,
      "chss" => $row->chss_no
    );
  }
}

echo json_encode($arr_result);

我还稍微修改了代码,所以即使没有结果,它也会始终以 JSON 格式输出一个空数组。

【讨论】:

  • 是的,它正在工作。不分享整个代码是我的错。我以后不会重复这个问题。非常感谢你..从我这边投票。
  • 你能在这个链接里帮我吗stackoverflow.com/questions/51782682/…
【解决方案2】:

在将$rows 编码为 JSON、对象或数组之前,您应该将它们原样放入数组中:

$arr_result = array();
if (count($result) > 0) {
    foreach ($result as $row){
        $arr_result[] = $row;  
    }
    echo json_encode($arr_result);
} else {
    echo "[]";
}

【讨论】:

  • 这也可以,但我要提醒的是,如果$row 包含其他不应显示的字段,此代码将在 JSON 中将它们返回给客户端。我们从发布的代码中不知道是否是这种情况。一般来说,构建一个包含特定用例所需内容的对象通常更为谨慎,即使它需要多行代码才能实现。
  • @Adder,你能帮我解决这个问题吗?stackoverflow.com/questions/51166869/…
  • @user9437856 我在看,但并不容易
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 2021-11-02
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2020-09-08
  • 2018-05-01
  • 2019-01-20
相关资源
最近更新 更多