Javascript jquery全局变量失败
我想在jquery函数之外使用一些变量,但我无法使它们成为全局变量。我按照建议先“var”它们,然后分配它们,但最后一个log()返回未定义Javascript jquery全局变量失败,javascript,jquery,Javascript,Jquery,我想在jquery函数之外使用一些变量,但我无法使它们成为全局变量。我按照建议先“var”它们,然后分配它们,但最后一个log()返回未定义 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 l
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'),
问题是您正在发出一个异步调用,该调用在调用
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');
除了上面这些人所说的,我相信您可以进行异步AJAx调用。看看这里您可以使用ajax asyc调用
$.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);
根据您的新代码,一个简单的解决方案是嵌套调用:
$.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');
给定更新的代码,您需要根据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');
$.get()
是异步的。console.log()
行在ajax回调函数之前执行。使用$.ajax()
并使其与async:false
@Brewal同步我以前说过,我要再说一遍,async:false
永远不是答案。@Brewal您可以轻松地在回调中全局设置变量,但是,如果您正确地遵循异步模式,则不需要这样做。任何人最不应该做的事情就是乱扔全局变量。@DirkNachbar你能发布完整的JS代码吗。我不认为下面的答案不能解决您的问题。我需要在外部/全局/稍后而不是内部使用它。您将不得不回顾异步编程模型。您需要像上面那样利用回调,然后对调用进行适当的排序。您仍然可以分配全局变量,但您需要确保首先为变量分配值!不能使用此方法指定“以后”本身。但是,您可以设置另一个函数,在收到成功返回时触发console.log,但在处理异步请求时,脚本中的“晚”并不等于时间上的“晚”。如上所述,您可以使$.get
同步,这将解决您的问题,但是你真的应该理解异步模型是如何工作的。为什么这个答案被否决了?没错,但不管你做什么。。。避免在同步模式下实际使用Ajax。这导致了黑暗面。学习使用异步操作。您可以/使AJAX调用同步,但请记住,这也将成为阻塞调用。。。在该调用返回之前,不会执行其他脚本,因此您将受远程服务器+延迟的支配,以确保您的脚本继续执行它需要执行的任何其他任务。我应该添加这一点,谢谢。我认为您指的是同步(synchronous),而不是异步(asynchronous),但是我强烈建议您不要使用Ajax同步模式,而是要学习使用异步操作。您不应该将async
属性设置为false
。学习使用回调和承诺对象。。。