我是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'”
有人能帮助我吗?
答案 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
的值(例如i
和GOOGL
)。
TSLA
(data
)中存储的值似乎使用{"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”