我正在尝试对Minecraft api进行API调用,返回其他状态消息,然后在网站上打印出来。为此,我正在使用AJAX JSON调用,获取输入的字符串以连接到API并在函数中获取有关服务器的信息(我非常确定这是最常用的方法)。
但是,当我尝试输入(工作)IP时,它会非常简短地显示研究数据... 消息,然后再次清除该字段。什么都没有出现,即使应该从API进行状态按摩。它甚至没有登录控制台。
对此有何帮助?
JS代码:
function getStatus(){
var ip = $("#ip").val(); //getting the value from the textbox
if(ip == ""){
$("#addmes").html("<h1>you didn't enter anything -.-</h1>"); //checking if anything is entered
} else {
$("#addmes").html("<h1>researching data...</h1>"); //displaying a temporary status message
$.getJSON("http://api.syfaro.net/minecraft/1.2/server/status?ip="+ ip + "&callback=?", function(json){ //connecting to the API, using the IP variable in the process
console.log(json); //console log
$("#addmes").html("<h1>" + json[0].status + "</h1>"); //printing out the API status message
})
}
}
API响应(使用http://api.syfaro.net/minecraft/1.2/server/status?ip=mc.hypixel.net&callback=测试?):
?({"status":"success","ip":"mc.hypixel.net","port":25565,"last_update":"2013-12-19 09:09:58","online":true,"motd":"\u00a7aHypixel Lobby \u00a76| \u00a7cPlay Now! \u00a7eMega Walls \u00a7aPublic BETA!","players":{"max":16001,"online":6989,"list":false},"version":"1.7.2","favicon":false});
答案 0 :(得分:2)
响应看起来不像数组。这只是一个对象。尝试仅使用json.status,而不是json [0] .status。
答案 1 :(得分:1)
试试这个网址:
http://api.syfaro.net/minecraft/1.2/server/status?ip=mc.hypixel.net&callback=jsonp
你原来的网址是什么?在开头没有函数名称返回。我不确定是否可以使用没有函数名的jsonp,但是你可以检查......
它在这里工作:
$.getJSON( "http://api.syfaro.net/minecraft/1.2/server/status?ip=mc.hypixel.net&callback=?", function( json ) {
console.log( json );
$(".status").html(json.status);
});
答案 2 :(得分:-1)
编辑:我阅读了getJSON的文档,它似乎确实自动识别了JSONP请求。留下这里的帖子,以防它对某人有帮助
我怀疑你被Same-origin policy打扰了。
如果您(我怀疑)实际上并不是syfaro.net的程序员,并且您没有在该服务器上运行此脚本,则您将无法访问该页面。
有帮助的是,为了解决这个问题,人们创造了JSONP,这是一个相当讨厌的黑客行为,但它会让你做你想要的事情。
你可以像这样使用它:
function getStatus(){
var ip = $("#ip").val(); //getting the value from the textbox
if(ip == ""){
$("#addmes").html("<h1>you didn't enter anything -.-</h1>"); //checking if anything is entered
} else {
$("#addmes").html("<h1>researching data...</h1>"); //displaying a temporary status message
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'http://api.syfaro.net/minecraft/1.2/server/status?ip="+ ip + "&callback=jsonCallback';
head.appendChild(script);
}
}
function jsonCallback(json){
$("#addmes").html("<h1>" + json[0].status + "</h1>"); //printing out the API status message
}