我正在使用Ajax获取响应并根据设备ID缓存一些选择器,以便在执行页面时进行操作,如下所示:
$updateRate = 300000;
$devices_temperature_integer = []
$devices_temperature_decimal = []
$devices_humidity = []
$devices_luminosity = []
$devices_atm_pressure = []
$(".monitoring.weather_monitoring").ready(function() {
cacheInfo();
getInfo();
$allTimer = setInterval(
function() {
getInfo();
},
$updateRate
);
return false;
});
function cacheInfo() {
$.ajax({
type: "GET",
url: "/get_all_current_weather_infos",
dataType: "json",
success: function(response){
for (i = 0; i < response.length; i++) {
$devices_temperature_integer[i] = $('#device-'+response[i][0].id+"-temperature-integer");
$devices_temperature_decimal[i] = $('#device-'+response[i][0].id+"-temperature-decimal");
$devices_humidity[i] = $('#device-'+response[i][0].id+"-humidity");
$devices_luminosity[i] = $('#device-'+response[i][0].id+"-luminosity-data");
$devices_atm_pressure[i] = $('#device-'+response[i][0].id+"-atm_pressure");
}
}
});
return false;
}
function getInfo() {
$.ajax({
type: "GET",
url: "/get_all_current_weather_infos",
dataType: "json",
success: function(response){
for (i = 0; i < response.length; i++) {
$temp = response[i][1].data.toFixed(1);
$intPart = ($temp+"").split(".")[0];
$decPart = ($temp+"").split(".")[1];
$devices_temperature_integer[i].html($intPart) //Error here
}
}
});
return false;
}
它在Chrome上运行顺利,但我在Safari和Firefox上获得TypeError: $devices_temperature_integer[i] is undefined
(这是我操作的第一个阵列)。此外,有时如果我继续在这些浏览器上刷新页面,则错误消失并且页面正常工作。知道发生了什么事吗?
答案 0 :(得分:0)
一个Ajax调用在另一个之前完成,它会提供一些参数。所以我使用$.ajax({ ... }).done(getInfo)
来防止这种情况发生。