使用jQuery调用JSON响应API

时间:2017-08-31 02:46:48

标签: javascript jquery json

我是javascript(和jquery)的新手,我想像这样调用api:

{"GOOGL":{"PRICE":950.123},"TSLA":{"PRICE":345.67}}

我尝试使用我的代码,但它不起作用:

var list = ["GOOGL","TSLA"];


$( document ).ready(function() {
    $.getJSON('api.json', function(data) {
        for (var i in list) {
                console.log(data.list[i].PRICE);
        };
    });
});

我收到如下错误:“未捕获的TypeError:无法读取未定义的属性'0'”

有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

在评论中提及@nnnnnn,您可以这样做:

$('button').on('click', function(){
    var this_id = $(this).attr('data-id');
    var this_action = $(this).attr('data-action');
    var title = $(this).attr('data-title');
    var base_url = this_action+'/';
    if(this_action == this_action){
        $.get( base_url + this_id + '/load-' + this_action, function( data ) {
            $('#myModal').modal();
            $('#myModal').on('shown.bs.modal', function(){
                $('#myModal .load_modal').html(data);
                $('.modal-header .modal-title').html(title);
            });
            $('#myModal').on('hidden.bs.modal', function(){
                $('#myModal .modal-body').data('');
            });
        });
     }
});

解释:

console.log(data[list[i]].PRICE); 将返回list[i]中存储在索引list的值(例如iGOOGL)。

TSLAdata)中存储的值似乎使用{"GOOGL":{"PRICE":950.123},"TSLA":{"PRICE":345.67}}list[i]GOOGL)的值作为键。

这意味着执行TSLA(使用data["GOOGL"])会获得data[list[i]]

然后再采取步骤{"PRICE":950.123}(使用data["GOOGL"].PRICE)会得到data[list[i]].PRICE

950.123无效,因为它在console.log(data.list[i].PRICE);对象中寻找list属性(不存在)。

在这种情况下,当data为零时,您会看到Uncaught TypeError: Cannot read property '0' of undefined,因为i返回undefined(并且代码正在尝试从中获取属性data.list)。< / p>

答案 1 :(得分:0)

for (var i in list) { 
    console.log(data[list[i]].PRICE); 
};

使用点运算符无法使用变量名来访问对象的属性。

所以你必须使用数组符号..

答案 2 :(得分:0)

@kevin:您无法使用点运算符访问对象键,因为您必须在哈希中传递该键,例如“data [list [i]]。PRICE”