我想在jquery函数之外使用一些变量,但是我无法使它们成为全局变量。我已经按照建议首先'var'然后分配它们,但最后一个log()返回undefined。
var lat,lon;
$.get('ip.json',function(data) {
var loc=data['loc'];
lat=loc.split(',')[0];
lon=loc.split(',')[1];
},'json');
console.log(lat,lon);
更新以下是完整代码
var lat,lon;
$.get('ip.json',function(data) {
console.log(data);
var city=data['city'];
var loc=data['loc'];
lat=loc.split(',')[0];
lon=loc.split(',')[1];
$('body').append(' '+city+' '+lat+' '+lon);
},'json');
console.log(lat,lon);
$.get('apiurl?lat='+lat+'&lon='+lon+'&callback=test',function(data) {},'json'),
答案 0 :(得分:1)
鉴于您的新代码,一个简单的解决方案是嵌套调用:
$.get('ip.json', function (data) {
console.log(data);
var city = data['city'];
var loc = data['loc'];
var lat = loc.split(',')[0];
var lon = loc.split(',')[1];
$('body').append(' ' + city + ' ' + lat + ' ' + lon);
$.get('apiurl?lat=' + lat + '&lon=' + lon + '&callback=test', function (data) {
//handle second response here
console.log(lat, lon);
}, 'json');
}, 'json');
答案 1 :(得分:1)
鉴于您更新的代码,您需要挂起所有依赖于AJAX调用结果的逻辑:
var lat, lon;
$.get('ip.json', function(data) {
console.log(data);
var city = data['city'];
var loc = data['loc'];
lat = loc.split(',')[0];
lon = loc.split(',')[1];
$('body').append(city + ' ' + lat + ' ' + lon);
// at this point you now have the data for your second AJAX call:
console.log(lat,lon);
$.get('apiurl?lat=' + lat + '&lon=' + lon + '&callback=test', function(data){
// do something
},'json'),
},'json');
答案 2 :(得分:0)
问题是您正在发出一个异步调用,该调用在调用console.log
之后返回。您需要在回调中加入console.log
才能使其正常运行。
var lat,lon;
$.get('ip.json',function(data) {
var loc=data['loc'];
lat=loc.split(',')[0];
lon=loc.split(',')[1];
console.log(lat,lon);
},'json');
答案 3 :(得分:0)
进一步说明上述人员的说法我相信你可以使AJAx调用异步。看看How to make JQuery-AJAX request synchronous
答案 4 :(得分:0)
您可以使用ajax异步调用
$.ajax({
async: "false",
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "uri",
success: function(data) {
var loc=data['loc'];
lat=loc.split(',')[0];
lon=loc.split(',')[1];
}
});
console.log(lat,lon);