通过JSON获取AJAX请求和循环

时间:2015-07-31 21:13:15

标签: javascript ajax json

我正在使用GET ajax请求从数据库中检索一些JSON数据。我想循环它并打印某些项目。例如,我只想打印stylist_1中的所有地址。问题是它只打印最后一项。

这是代码的样子:

var stylist1Addresses;

    function getData() {
        $.ajax({
            url: '/getData',
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            async: false,
            success: function (data) {
                for (var i = 0; i < data.stylist_1.length; i++) {
                    stylist1Addresses = data.stylist_1[i];
                }
            }
        });
        console.log(stylist1Addresses);
    }

示例数据:

{
  "stylist_1": [
    {
      "Address": "1 Stn Main", 
      "Phone": "403-990-9033"
    }, 
    {
      "Address": "474 Cirrus Rd", 
      "Phone": "403-995-3243"
    }, 
    {
      "Address": "1591 Stn St", 
      "Phone": "403-982-8893"
    }
  ], 
  "stylist_2": [
    {
      "Address": "219 Welch Blvd", 
      "Phone": "587-436-3171"
    }, 
    {
      "Address": "374 Main Rd", 
      "Phone": "587-315-9431"
    }, 
    {
      "Address": "564 Main Rd", 
      "Phone": "403-938-9983"
    }
  ]
}

3 个答案:

答案 0 :(得分:3)

以下是两种可能的解决方案。

第一个解决方案:

var stylist1Addresses;

    function getData() {
        $.ajax({
            url: '/getData',
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            async: false,
            success: function (data) {
                for (var i = 0; i < data.stylist_1.length; i++) {
                    stylist1Addresses = data.stylist_1[i];
                    console.log(stylist1Addresses);
                }
            }
        });
    }

这将生成三个控制台日志,每个地址之一。

第二个解决方案:

var stylist1Addresses = [];

function getData() {
    $.ajax({
        url: '/getData',
        type: 'GET',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: false,
        success: function (data) {
            for (var i = 0; i < data.stylist_1.length; i++) {
                stylist1Addresses.push(data.stylist_1[i]);
            }
            console.log(stylist1Addresses);
        }
    });
}

这将生成一个控制台日志,即所有三个地址的数组。

你在找哪个?

答案 1 :(得分:1)

您正在使用每个循环更新'stylist1Addresses'变量。

尝试将'stylist1Addresses'变量初始化为如下数组:

var stylist1Addresses = [];

并替换此行:

stylist1Addresses = data.stylist_1[i];

用这个:

stylist1Addresses.push(data.stylist_1[i]);

'push'会将每个循环上的项添加到'stylist1Addresses'数组中。

注意:如果您只想获取地址,则应使用此行代替

stylist1Addresses.push(data.stylist_1[i].Address);

答案 2 :(得分:0)

这就是我将仅在stylist_1中打印地址的方式

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
   var $string = '{THE JSON Here}';
   $json = $.parseJSON($string);
   for ( var i in $json ) {
      if ( i === 'stylist_1') {
        var list = $json[i];
        console.log(list[0].Address);
        return;
      }
    }
</script>