首页 > 解决方案 > $.each 在函数未定义(没有作品)

问题描述

使用函数的 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"
        }
      ]
    }
}

标签: javascriptjson

解决方案


只需用以下代码替换您的代码:-

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));

推荐阅读