在继续使用我的代码之前,我正在尝试获取用户的城市和国家/地区.似乎
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 */ });@H_301_4@我希望代码执行为:
step 1 step 2 step 3@H_301_4@但是,当我运行脚本时,我得到:
step 3 step 1 step 2@H_301_4@为什么代码以异步方式运行?有什么建议我可以解决它吗? @H_301_4@谢谢.
解决方法
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();@H_301_4@另一种方法是使用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'); });