【问题标题】:array length showing more than expected数组长度显示超出预期
【发布时间】:2019-09-27 12:47:02
【问题描述】:

我正在使用 ajax 和 json 从 MySQL 获取一些表列数据,并且需要将这些值显示给相应的输入 id 标签。但它没有显示值和数组长度显示超过预期。预期长度值为 8,但显示 101在控制台中。 和控制台中的数组数据

    [{"name":"adasdas",
      "gen":"F",
      "add":"asdasd",
      "dob":"2019-09-25",
      "ag":"25",
      "mob":"65165165",
      "tel":"1"}]

我的 ajax 请求是这个

$('#add').click(function(event){
            event.preventDefault();

                    var patient_no  = $('.patient_no').val();

                    $.ajax({
                        url : 'get_visit_details.php',
                        type : 'post',
                          data :{patient_no:patient_no},
                          datatype : 'json',
                        success:function(data){

                            var len = data.length;

                            console.log(len);
              console.log(data);

                  for(var i = 0;i < len; i++){
                                var pat_name    = data[i]['name'];
                                var gender      = data[i]['gen'];
                                var address     = data[i]['add'];
                                var d_birth     = data[i]['dob'];
                                var age           = data[i]['ag'];
                                var mobile      = data[i]['mob'];
                                var tele          = data[i]['tel'];

                                $('.pat_name').val(pat_name);
                                $('.gender').val(gender);
                                $('.address').val(address);
                                $('.d_birth').val(d_birth);
                                $('.age').val(age);
                                $('.tele').val(tele);
                                $('.mobile').val(mobile);

                            }
                        }
                });
          });

php代码就是这个

$patient_no =   $_POST['patient_no'];

$sql = "SELECT pat_name,gender,address,d_birth,age,mobile,tele,reg_no 
        FROM patient 
        WHERE reg_no = '$patient_no' ";
$result = query($sql);
confirm($result);

if($row = fetch_array($result)) {
        $pat_name   =   $row['pat_name'];
        $gender     =   $row['gender'];
        $address    =   $row['address'];
        $d_birth    =   $row['d_birth'];
        $age        =   $row['age'];
        $mobile     =   $row['mobile'];
        $tele       =   $row['tele'];
    }

        $patient_data = array();
        $patient_data[] = array("name" => $pat_name,"gen" => $gender, "add" => $address ,"dob" => $d_birth ,
                                "ag" => $age , "mob" => $mobile,"tel" => $tele);

    echo json_encode($patient_data);

【问题讨论】:

  • 您展示的是包含 one 单个元素的数组的 JSON 表示形式。 (那个元素本身就是一个object。)
  • 您的服务器端代码甚至不会循环,因此它最多可以将 一个 记录放入您的数组中。那么你为什么还要在客户端循环呢?似乎意义不大。
  • 先检查服务器端的值。然后检查客户端。

标签: php jquery arrays ajax


【解决方案1】:

101是字符串的长度

[{"name":"adasdas","gen":"F","add":"asdasd","dob":"2019-09-25","ag":"25","mob":"65165165","tel":"1"}]

预期结果是“1”,因为 json 数组中有 7 个 json 对象

JavaScrip 无法解码 de Json?尝试这样做

var obj = jQuery.parseJSON( '[{"name":"adasdas","gen":"F","add":"asdasd","dob":"2019-09-25","ag":"25","mob":"65165165","tel":"1"}]' );
console.log(obj.length);

这必须返回 1

console.log(obj[0].name)

这必须返回“adasdas”

我在开发者控制台中测试,如果不工作,可能的 php 输出包含非法字符,以“原始”显示 php 输出(在 webbrowser 点击“查看源代码”)

【讨论】:

    【解决方案2】:

    我可以看到数据是数组对象。所以得到长度如下

    var data_count = Object.keys(data).length;
    console.log(data_count);
    

    如果要获取对象的长度,请使用

    Object.getOwnPropertyNames(data).length
    

    【讨论】:

      猜你喜欢
      • 2013-07-17
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2014-09-19
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多