JavaScript:奇怪的字典行为

时间:2019-04-19 13:20:28

标签: javascript dictionary

我有用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]);
}

问题在于,即使程序包含适当的数据,它也不会通过“服务器”字典进行迭代:

dictionary_pic

我尝试了几种不同的方法(请参见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]);
}

有什么区别?我在做什么错了?

0 个答案:

没有答案