使用函数的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"
}
]
}
}
答案 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)
您可以一起尝试filter
和map
函数来实现所需的功能。
请参见下文-
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
才能在警报中查看它。