jquery全局变量失败

时间:2013-10-17 13:14:04

标签: javascript jquery

我想在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'),

5 个答案:

答案 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);