-1

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

5 回答 5

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');
于 2013-10-17T13:34:46.093 回答
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');
于 2013-10-17T13:36:08.063 回答
0

除了上面的人所说的,我相信你可以使 AJAx 调用异步。看看这里如何使 JQuery-AJAX 请求同步

于 2013-10-17T13:18:39.570 回答
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');
于 2013-10-17T13:15:54.027 回答
0

您可以使用 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);
于 2013-10-17T13:22:29.277 回答