$ .each函数未定义(无效)

时间:2018-10-30 12:29:03

标签: javascript json

使用函数的JSON输出存在问题。我需要这样的东西:

function loadnames()
{
    return $.ajax({
        type: "GET",
        url: "<?php echo $servers; ?>",
        dataType: 'json',
        async: false,
        success: function() {
            console.log('All right');
        },
        error: function () {
            console.log('Cry baby');
        }
    }).responseText;
}

function srvName(sid) {
    var names = JSON.parse(loadnames());
    $.each(names.data.servers, function(index, server) {
        if(server.id == sid) {
            return server.hostname;
        }
    }); 
}

alert(srvName(86));

但是它不起作用。如果您从功能中删除sid并手动将其放置,那么一切都会正常工作并显示您所需要的内容……如何解决此问题?

这有效:

function srvName() {
    var names = JSON.parse(loadnames());
    $.each(names.data.servers, function(index, server) {
        if(server.id == 86) {
            return server.hostname;
        }
    }); 
}

alert(srvName());
//returns SERVER NAME 86 from alert

Json示例:

{
  "data": {
    "servers":[
        {
            "id":86,
            "hostname":"SERVER NAME 86"
            },
            {
            "id":23,
            "hostname":"SERVER NAME 23"
        }
      ]
    }
}

2 个答案:

答案 0 :(得分:0)

只需将代码替换为以下内容:-

function srvName(sid) {
    var names = JSON.parse(loadnames());
    if(names.data.servers) {
      let server = names.data.servers.find(server => server.id === sid);
      if(server) return server.hostname;
      return 'matching server not found';
    }
}

alert(srvName(86));

答案 1 :(得分:0)

您可以一起尝试filtermap函数来实现所需的功能。

请参见下文-

var myJason = `{
  "data": {
    "servers":[
        {
            "id":86,
            "hostname":"SERVER NAME 86"
            },
            {
            "id":23,
            "hostname":"SERVER NAME 23"
        }
      ]
    }
}`;

function srvName() {
    var names = JSON.parse(myJason);
    return names.data.servers.filter(f=> f.id==86).map(f=> f.hostname);
}

console.log(srvName());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意-由于警报仅显示string,因此您需要stringify才能在警报中查看它。