1. 异步--同步
ajax请求属于异步请求,如果想将请求的数据提供给外部使用,如下面方式:这个方式将返回一个空对象 因为ajax请求默认是异步的,return 语句将先于getJSON中的操作。
解决方式是,将ajax操作定义为同步的请求方式就可以了(async: false)。但是只能通过$.ajax()的方式,$.getJSON 等方式都是异步操作。
注: 同步操作会有效率的问题,它需要等待ajax请求结束才执行下一步操作,可能会导致浏览器出现假死状态
var getDayComparisonData = function() {
var lastDay, lastDayTotal = 0, toDay, toDayTotal = 0;
$.getJSON(Constants.CONTEXT_PATH
+ "/statistics/findTodayAndYesDayPassengerFlow", function(data) {
toDayTotal = data.todayCount;
lastDayTotal = data.yesterDayCount;
});
return {
toDayTotal : toDayTotal,
toRate : lastDayTotal && (toDayTotal / lastDayTotal - 1) * 100
}
};
//解决方式
var getDayComparisonData = function() {
var lastDay, lastDayTotal = 0, toDay, toDayTotal = 0;
$.ajax({
async: false, //同步请求
type : "GET",
url : Constants.CONTEXT_PATH
+ "/statistics/findTodayAndYesDayPassengerFlow",
success : function(data) {
toDayTotal = data.todayCount;
lastDayTotal = data.yesterDayCount;
}
});
return {
toDayTotal : toDayTotal,
toRate : lastDayTotal && (toDayTotal / lastDayTotal - 1) * 100
}
};