简体   繁体   English

为什么我无法访问JSON中的数据?

[英]Why can't I access the data in my JSON?

My PHP is: 我的PHP是:

if(!empty($_POST)&&($_POST['action']=='edit'))
{
    foreach ($_POST['selected'] as $edit_id) 
    {
        $query = "SELECT * FROM grocery WHERE id = $edit_id";
        $result = dbQuery($query);
        break;
    }

    $rowArr=array();
    $inRow = mysqli_fetch_array($result);

    $id = $inRow['id'];
    $shop = $inRow['shop'];
    $category = $inRow['category'];
    $item = $inRow['item'];
    $qnty = $inRow['quantity'];
    $unit = $inRow['unit'];
    $price_based_on = $inRow['price_based_on'];
    $mrp = $inRow['MRP'];
    $sellers_price = $inRow['sellers_price'];
    $last_updated_on = $inRow['last_updated_on'];
    array_push($rowArr, array('id' => $id, 'shop' => $shop, 'category' =>$category, 'item' => $item, 'qnty' => $qnty, 'unit' => $unit, 'price_based_on' => $price_based_on, 'mrp' => $mrp, 'sellers_price' => $sellers_price, 'last_updated_on' => $last_updated_on));  
    echo json_encode(array('rowArr' => $rowArr));
}

The output (JSON) produced by the above script is: (I've ensured this is produced in the Chrome's console) 上面的脚本产生的输出(JSON)为:(我确保这是在Chrome的控制台中产生的)

{
  "rowArr": [
    {
      "id": "30",
      "shop": "Subhash",
      "category": "Spices",
      "item": "Duta Corriander Powder",
      "qnty": "50",
      "unit": "gm",
      "price_based_on": "Packet",
      "mrp": "15.00",
      "sellers_price": "12.00",
      "last_updated_on": "2016-12-03"
    }
  ]
}

My jQuery is: 我的jQuery是:

$('#edit').click(function(){
    var data = $("#list :input").serialize();
    $.post($("#list").attr('action'), data, function(json) 
    {
        if(json.rowArr.length>0)
            console.log("Data Exists");
        else
            console.log("Empty");
        currentRow = json.rowArr[0];
        console.log(json.rowArr[0].id);
        $("#id").val(currentRow.id);
        $("#id_disp").val(currentRow.id);
    });
});

Strangely enough, neither Data Exists or Empty is produced by the above loop. 奇怪的是,上述循环既没有Data Exists也没有Empty And when I try to access the JSON data, json.rowArr[0].id I get the following error: 当我尝试访问JSON数据json.rowArr[0].id ,出现以下错误:

Uncaught TypeError: Cannot read property 'length' of undefined 未捕获的TypeError:无法读取未定义的属性“ length”

Why is this happening? 为什么会这样呢? How do I fix it? 我如何解决它?

You should explicitly tell jQuery that your response has JSON format. 您应该明确告诉jQuery您的响应具有JSON格式。 You should pass 'json' as fourth argument of $.post , according to docs . 根据docs ,您应该传递'json'作为$.post第四个参数。

$('#edit').click(function(){
    var data = $("#list :input").serialize();
    $.post($("#list").attr('action'), data, function(json) {
        if(json.rowArr.length>0)
            console.log("Data Exists");
        else
            console.log("Empty");
        currentRow = json.rowArr[0];
        console.log(json.rowArr[0].id);
        $("#id").val(currentRow.id);
        $("#id_disp").val(currentRow.id);
    }, 'json');
});

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

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