访问json数组位置时,我得到'undefined'

时间:2013-09-12 03:51:32

标签: javascript php jquery ajax json

我在php中获取db查询的结果,并通过json数组中的ajax返回它,但是当我尝试访问数据时,它给我的数据为'undefined' 为什么会这样?

这是我的php代码:

<?php
    $tipo_prod= $_POST['tipo_prod'];
    $conn = oci_connect("admin", "admin", "localhost/XE");
    $query = "SELECT COD_PRODUCTO, NOMBRE FROM PRODUCTO WHERE COD_TIPO_PROD=" . $tipo_prod;
    $exec= oci_parse($conn, $query);
    oci_execute($exec);
    //Check connection!!!
    $exec= oci_fetch_array($exec);
    echo json_encode($exec);
?>

我的ajax代码:

$.ajax({
    url : "trae_producto.php", 
    type : "POST",
    data: {"tipo_prod" : tipo_prod},
    success : function(data){
    data = JSON.stringify(data);
    $.each(data, function(index, value){
        $('#producto').append("<option value='" + value.COD_PRODUCTO + "'>" + value.NOMBRE + "</option>"); 
    });
}});

4 个答案:

答案 0 :(得分:0)

尝试做::

$.ajax({
    url : "trae_producto.php", 
    type : "POST",
    data: {"tipo_prod" : tipo_prod},
    dataType: "json",
    success : function(data){        
    $.each(data, function(index, value){
        $('#producto').append("<option value='" + value.COD_PRODUCTO + "'>" + value.NOMBRE + "</option>"); 
    });
}});

尝试在PHP代码中添加Content-Type标头,例如:

header('Content-Type: application/json');
echo json_encode($exec);

添加了: 做点什么

while($data = oci_fetch_array($exec)) {
 $out[] = $data;
}
echo json_encode($out);

答案 1 :(得分:0)

$.ajax({
    url : "trae_producto.php", 
    type : "POST",
    dataType: "json",
    data: {"tipo_prod" : tipo_prod},
    success : function(data){
    /* data = JSON.stringify(data); */
    $.each(data, function(index, value){
        $('#producto').append("<option value='" + value.COD_PRODUCTO + "'>" + value.NOMBRE + "</option>"); 
    });
}});

我不知道你从PHP脚本中得到了什么真正的回报,但如果假设它是正确的,那么AJAX似乎有一些缺陷。

  1. JSON.stringify会使您的对象成为字符串类型,因此jQuery迭代器将无法工作。
  2. 使用“dataType”属性通知AJAX它将获取JSON对象

答案 2 :(得分:0)

您正在尝试将其提供的结果转换为JSON。 jQuery已经为你解析它,只需删除JSON.stringify的行。

 $.ajax({
     url : "trae_producto.php", 
     type : "POST",
     data: {"tipo_prod" : tipo_prod},
     success : function(data){
        $.each(data, function(index, value){
            $('#producto').append("<option value='" + value.COD_PRODUCTO + "'>" + value.NOMBRE + "</option>"); 
        });
     }
 });

答案 3 :(得分:0)

首先,通过firebug调试是否要获取JSON对象,以及服务器是否正在发送数据。然后,您可以使用data = JSON.stringify(data);

代替data = JSON.parse(data);