Ajax访问从JSON中的PHP返回的多维数组

时间:2014-08-27 07:32:07

标签: php jquery arrays ajax json

我正在使用ajax get方法从我的数据库中返回一些信息。 ajax方法将选择的任何类别发送到php脚本,该脚本获取product表中的所有行,并将这些行添加到名为$ arr的变量中。 $ arr是一个包含每个项目和该项目详细信息的多维数组。

一旦返回到ajax成功函数,我真的很难尝试访问这些信息。这是我的ajax函数,其中包含我试图用来查看'data'对象中包含的数据的警报:

$('.category').click(function() {

    var category;

    if ($(this).hasClass('Shirts')) {
        category = 'shirts';
    }
    if ($(this).hasClass('Hats')) {
        category = 'hats';
    }
    if ($(this).hasClass('Acc')) {
        category = 'acc';
    }

    $.ajax({
        type: 'GET',
        url: 'galleryfetch.php',
        data: { 'category' : category },
        dataType: 'json',
        success:  function(data) {


            // alert(data);  Alerts '[object Object]'
            // alert(data[0]); Alerts 'undefined'
            // alert(data[0].ID); Console Error: Cannot read property 'ID' of undefined
            // alert(data.array[0].ID); Console Error: Cannot read property 'ID' of undefined
        }
    });
});

该函数找出已单击的类别,然后将其发送到galleryfetch.php脚本,该脚本从该类别中获取数据库中的所有行,并以JSON格式返回它们,如下所示:

if ($_SERVER['REQUEST_METHOD'] == 'GET') {

    $category = $_GET['category'];

    $conn = mysqli_connect('localhost', 'root', 'Chan&', 'clothing');   

    $rows = mysqli_query($conn, "SELECT * FROM products WHERE category = '".$category."'");



    while ($row = mysqli_fetch_array($rows)) {

        $arr[] = $row; 
    } 

    echo json_encode(array('data' => $arr));
}

如果我使用Firebug调试代码,我可以看到正确的数据肯定包含在'data'对象中: enter image description here

如何访问此数据?

3 个答案:

答案 0 :(得分:1)

我认为问题在于您将数据放入称为数据的密钥中。所以这应该输出你的预期结果。

$.ajax({
        type: 'GET',
        url: 'galleryfetch.php',
        data: { 'category' : category },
        dataType: 'json',
        success:  function(data) {

              console.log(data.data[0]);
        }
    });
编辑:如果你正在使用谷歌浏览器,我推荐使用邮差附加组件。这是模仿AJAX调用的好方法,特别是如果您使用不太常见的HTTP方法(如PUT和DELETE)。我在尝试开发自己的API时经常使用它。

答案 1 :(得分:1)

根据发布的图片,您将收到一个名为data的数组,该数组由4个对象组成。问题是,在每个对象内部,你都会弄乱数字索引和关联索引。我会试试这个:

success:  function(data) {

   // accessing all the properties
   for(var x in data["data"]) {
      for(var y in data["data"][x]) {
         if (y=="ID") {
            alert( "ID of "+x+" is: "+data["data"][x][y] );
         }
      }
   }

   // or simply
   alert( data["data"][0]["ID"] );

}

答案 2 :(得分:0)

您正在返回具有密钥'数据'接收具有相同名称的javascript参数/变量。 你应该检查javascript data.data,它是一个数组:

的console.log(data.data [0])