這是一個具有異步響應的函數。實施是利用回調最簡單的方法:
function goHome(cb){
var xhr = new XMLHttpRequest();
var fnError = function(type){
return function(){
console.error('error', type, 'has ocurred');
cb({error: type});
};
};
var fnOK = function(evt){
if (evt.currentTarget && evt.currentTarget.readyState === 4 && evt.currentTarget.status === 200) {
try{
var response = JSON.parse(evt.currentTarget.responseText);
cb(null, response.query)
}catch(err){
fnError('parsing xhr failed')();
}
} else {
fnError('xhr failed')();
}
}
xhr.open("GET", 'http://ip-api.com/json', true);
xhr.addEventListener('error', fnError('error'));
xhr.addEventListener('abort', fnError('abort'));
xhr.addEventListener('load', fnOK);
xhr.send();
}
基本用法:
goHome(function(err, ip){
if (err){
console.error(err);
} else {
//do stuff
console.log(JSON.stringify(ip));
}
});
看在你的瀏覽器的開發者工具的控制檯是開始弄清楚爲什麼JS行不通一個非常好的方式。 – Quentin