在继续使用我的代码之前,我正在尝试获取用户的城市和国家/地区.似乎
javascript没有按照我需要的顺序执行.
$(document).ready(function() { var country,city = ''; function geoData() { $.getJSON('http://ipinfo.io/json?callback=?',function (data) { console.log('step 1'); country = data.country; city = data.city; console.log('step 2'); }); }; geoData(); console.log('step 3'); /* rest of the code */ });
我希望代码执行为:
step 1 step 2 step 3
但是,当我运行脚本时,我得到:
step 3 step 1 step 2
谢谢.
解决方法
AJAX请求是异步的 – 它是第一个A代表的.如果您的逻辑依赖于请求返回的数据,则需要将其置于回调函数中.试试这个:
var country,city = ''; function geoData() { $.getJSON('http://ipinfo.io/json?callback=?',function (data) { console.log('step 1'); country = data.country; city = data.city; console.log('step 2'); step3(); }); }; function step3() { console.log('step 3'); } geoData();
另一种方法是使用promise,尽管逻辑流程大致相同:
var country,city = ''; function geoData() { return $.getJSON('http://ipinfo.io/json?callback=?',function (data) { console.log('step 1'); country = data.country; city = data.city; console.log('step 2'); }); }; var deferred = geoData(); $.when(deferred).done(function() { console.log('step 3'); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。