响应仅在Firefox和Safari上生成TypeError

时间:2018-04-18 17:24:17

标签: javascript jquery ruby-on-rails ajax

我正在使用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(这是我操作的第一个阵列)。此外,有时如果我继续在这些浏览器上刷新页面,则错误消失并且页面正常工作。知道发生了什么事吗?

1 个答案:

答案 0 :(得分:0)

一个Ajax调用在另一个之前完成,它会提供一些参数。所以我使用$.ajax({ ... }).done(getInfo)来防止这种情况发生。