我有用JS编写的简单搜索功能。它使用ajax请求来填充服务器字典:
function searchFunction(){
var list = document.getElementById('autocomplete-items');
list.innerHTML="";
var servers = {};
$.ajax({
url: "{% url 'ajax' %}",
type: 'GET',
data: {'action': 'search', 'query':document.getElementById('myInput').value},
dataType: "json",
success: function(resp){
$.each(resp, function(idx, obj) {
switch(obj.model){
case 'server_list.server':
servers[obj.pk]={hostname:obj.fields['hostname'], ip:[]};
break;
case 'server_list.ip':
if (!servers[obj.fields['server']].ip.includes(obj.fields['ip_as_string'])){
servers[obj.fields['server']].ip.push(obj.fields['ip_as_string']);
}
break;
}
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error: ' + errorThrown);
}
});
for(var key in servers){
console.log(key, servers[key]);
}
问题在于,即使程序包含适当的数据,它也不会通过“服务器”字典进行迭代:
我尝试了几种不同的方法(请参见How to iterate (keys, values) in javascript?),但没有任何效果。但是,如果我手动创建类似的字典,那么一切都像一个咒语:
var serverst = {};
serverst[10]={hostname:'name1',ip:[]};
serverst[10].ip.push('10.10.10.10');
serverst[20]={hostname:'name2', ip:[]};
serverst[20].ip.push('20.20.20.20');
serverst[20].ip.push('30.30.30.30');
console.log("c", serverst);
for (let key in serverst){
console.log(key, serverst[key]);
}
有什么区别?我在做什么错了?