jquery全局变量失败

jquery global variable failing

本文关键字:失败 全局变量 jquery      更新时间:2023-09-26

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

给定您的新代码,一个简单的解决方案是嵌套调用:

$.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');

问题是您正在发出一个异步调用,该调用在调用 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 调用。看看这里 如何使 JQuery-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);