Javascript 我得到';未定义';访问json数组位置时

Javascript 我得到';未定义';访问json数组位置时,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我在php中获得db查询的结果,并通过json数组中的ajax返回结果,但当我尝试访问数据时,它会将数据作为“未定义”返回 为什么会这样 以下是我的php代码: <?php $tipo_prod= $_POST['tipo_prod']; $conn = oci_connect("admin", "admin", "localhost/XE"); $query = "SELECT COD_PRODUCTO, NOMBRE FROM PRODUCTO WHERE CO

我在php中获得db查询的结果,并通过json数组中的ajax返回结果,但当我尝试访问数据时,它会将数据作为“未定义”返回 为什么会这样

以下是我的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>"); 
    });
}});
$.ajax({
url:“trae_producto.php”,
类型:“POST”,
数据:{“tipo_prod”:tipo_prod},
成功:功能(数据){
data=JSON.stringify(数据);
$.each(数据、函数(索引、值){
$('#producto')。追加(“+value.NOMBRE+”);
});
}});
试着做:

$.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>"); 
    });
}});
增加: 做点像

while($data = oci_fetch_array($exec)) {
 $out[] = $data;
}
echo json_encode($out);
$.ajax({
url:“trae_producto.php”,
类型:“POST”,
数据类型:“json”,
数据:{“tipo_prod”:tipo_prod},
成功:功能(数据){
/*data=JSON.stringify(数据)*/
$.each(数据、函数(索引、值){
$('#producto')。追加(“+value.NOMBRE+”);
});
}});
我不知道PHP脚本的实际回报是什么,但如果假设它是正确的,AJAX似乎有一些缺陷

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

  • 您正在尝试将它提供的结果转换为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>"); 
            });
         }
     });
    
    $.ajax({
    url:“trae_producto.php”,
    类型:“POST”,
    数据:{“tipo_prod”:tipo_prod},
    成功:功能(数据){
    $.each(数据、函数(索引、值){
    $('#producto')。追加(“+value.NOMBRE+”);
    });
    }
    });
    
    首先,通过firebug调试您是否正在获取JSON对象,以及您的服务器是否正在发送数据。然后,代替
    data=JSON.stringify(数据)
    ,可以使用
    data=JSON.parse(data)

    作为第一步,使用浏览器网络选项卡或通过在控制台的成功手柄中记录
    数据的值来检查从服务器返回的值。我尝试了它,但它没有向我发送任何信息,即使我使用console.log()@montjoile,你对console.log(data)看到了什么。。。?我使用:console.log(数据[0].NOMBRE);超出$each和console.log(value.NOMBRE);在$each中,并且在console@montjoile尝试只执行console.log(数据);在你的每一美元之前。。看看你能得到什么data@montjoile请参阅添加的答案,并验证您是否在PHP端的$exec变量中实际获得了结果。。!它告诉我:“TypeError:invalid'in'操作数e”
    
    $.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>"); 
        });
    }});
    
     $.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>"); 
            });
         }
     });