推送前的javascript条件?

标签 javascript jquery xml highcharts

好的,我有一个使用 Highcharts.JS 的图表,该图表由提供 XML 数据的 api 调用填充。

我已经设法将数据推送并显示在图表上,但现在我遇到了“当“x”组件没有数据时会发生什么”的问题,其中我发现它使得整个图表为空白,直到您单击隐藏图例上的“x”组件。

所以我想我可以做一些条件来让它检查数组中是否确实存在由 XML 生成的数据。

<!DOCTYPE html>
<html>
<head>
<title>Graph</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript" src="https://code.highcharts.com/highcharts.js"> </script>

<script>
$(document).ready(function() {
  var sgaxml = 'https://sga.quickbase.com/db/bjmdensiu?apptoken=beadyrucxguavbx5isubd6iaqpe&act=API_DoQuery&query=%7B14.EX.%27_FID_9%7D&clist=7.24.25.26.27.28.29.30.31.32.33.34.35.36.37'
  var options = {
    chart: {
      renderTo: 'container',
      type: 'column'
    },
    title: {
      text: 'Components Over Time'
    },
    xAxis: {
      categories: []
    },
    yAxis: {
      title: {
        text: 'Concentration%'
      }
    },
    series: []
  };

  // Load the data from the XML file 
  $.get(sgaxml, function(xml) {
    // Split the lines
    var xml = $(xml).find('record');

    // Variables for the component series
    var seriesH = {
        name: 'Hydrogen',
        data: []
    };
    var seriesHe = {
        name: 'Helium',
        data: []
    };
    var seriesO = {
        name: 'Oxygen',
        data: []
    };
    var seriesHs = {
        name: 'Hydrogen Sulfide',
        data: []
    };
    var seriesN = {
        name: 'Nitrogen',
        data: []
    };
    var seriesC = {
        name: 'Carbon Dioxide',
        data: []
    };
    var seriesM = {
        name: 'Methane',
        data: []
    };
    var seriesE = {
        name: 'Ethane',
        data: []
    };
    var seriesP = {
        name: 'Propane',
        data: []
    };
    var seriesIb = {
        name: 'Iso-Butane',
        data: []
    };
    var seriesNb = {
        name: 'N-Butane',
        data: []
    };
    var seriesIp = {
        name: 'Iso-Pentane',
        data: []
    };
    var seriesNp = {
        name: 'N-Pentane',
        data: []
    };
    var seriesHex = {
        name: 'Hexanes+',
        data: []
    };
    xml.each(function (i, record) {
      options.xAxis.categories.push(new Date(parseInt($(record).find('sample_date').text())));
      seriesH.data.push(parseFloat($(record).find('hydrogen').text()));
      seriesHe.data.push(parseFloat($(record).find('helium').text()));
      seriesO.data.push(parseFloat($(record).find('oxygen').text()));
      seriesHs.data.push(parseFloat($(record).find('hydrogen_sulfide').text()));
      seriesN.data.push(parseFloat($(record).find('nitrogen').text()));
      seriesC.data.push(parseFloat($(record).find('co2').text()));
      seriesM.data.push(parseFloat($(record).find('methane').text()));
      seriesE.data.push(parseFloat($(record).find('ethane').text()));
      seriesP.data.push(parseFloat($(record).find('propane').text()));
      seriesIb.data.push(parseFloat($(record).find('iso_butane').text()));
      seriesNb.data.push(parseFloat($(record).find('n_butane').text()));
      seriesIp.data.push(parseFloat($(record).find('iso_pentane').text()));
      seriesNp.data.push(parseFloat($(record).find('n_pentane').text()));
      seriesHex.data.push(parseFloat($(record).find('hexanes_').text()));
    });

    console.log(seriesO);   
    options.series.push(seriesH);
    options.series.push(seriesHe);
    options.series.push(seriesO);
    options.series.push(seriesHs);
    options.series.push(seriesN);
    options.series.push(seriesC);
    options.series.push(seriesM);
    options.series.push(seriesE);
    options.series.push(seriesP);
    options.series.push(seriesIb);
    options.series.push(seriesNb);
    options.series.push(seriesIp);
    options.series.push(seriesNp);
    options.series.push(seriesHex);
    console.log('options: ', options);  

    var chart = new Highcharts.Chart(options);
  });
});
</script>
</head>
<body>
  <div id="container" style=" width: 1000px; height: 600px; margin: 0 auto "></div>
</body>
</html>

<!--
XML FROM CALL 
=============

<qdbapi>
  <action>API_DoQuery</action>
  <errcode>0</errcode>
  <errtext>No error</errtext>
  <dbinfo>
    <name>RESULT</name>
    <desc/>
  </dbinfo>
  <variables>
    <co2>Carbon Dioxide</co2>
    <methane>methane</methane>
  </variables>
  <chdbids></chdbids>
  <record>
    <sample_date>1386892800000</sample_date>
    <hydrogen>0.002</hydrogen>
    <helium>0.114</helium>
    <oxygen/>
    <hydrogen_sulfide/>
    <nitrogen>1.926</nitrogen>
    <co2>0.454</co2>
    <methane>82.163</methane>
    <ethane>6.353</ethane>
    <propane>4.760</propane>
    <iso_butane>0.618</iso_butane>
    <n_butane>1.819</n_butane>
    <iso_pentane>0.491</iso_pentane>
    <n_pentane>0.544</n_pentane>
    <hexanes_>0.756</hexanes_>
    <update_id>1408654196361</update_id>
  </record>
  <record>
    <sample_date>1383782400000</sample_date>
    <hydrogen>0.006</hydrogen>
    <helium>0.038</helium>
    <oxygen/>
    <hydrogen_sulfide/>
    <nitrogen>0.512</nitrogen>
    <co2>0.844</co2>
    <methane>83.178</methane>
    <ethane>8.678</ethane>
    <propane>3.631</propane>
    <iso_butane>0.493</iso_butane>
    <n_butane>1.097</n_butane>
    <iso_pentane>0.342</iso_pentane>
    <n_pentane>0.371</n_pentane>
    <hexanes_>0.810</hexanes_>
    <update_id>1408981434690</update_id>
  </record>
  <record>
    <sample_date>1369699200000</sample_date>
    <hydrogen>0.004</hydrogen>
    <helium>0.060</helium>
    <oxygen/>
    <hydrogen_sulfide/>
    <nitrogen>1.684</nitrogen>
    <co2>0.443</co2>
    <methane>77.742</methane>
    <ethane>10.430</ethane>
    <propane>6.842</propane>
    <iso_butane>0.587</iso_butane>
    <n_butane>1.482</n_butane>
    <iso_pentane>0.232</iso_pentane>
    <n_pentane>0.249</n_pentane>
    <hexanes_>0.245</hexanes_>
    <update_id>1408981112624</update_id>
  </record>
</qdbapi>

我尝试使用 isnan() 因为我被告知可以使用它,但没有任何结果。

最佳答案

在 highcharts 中已经有一种方法可以处理这个问题。请参阅noData .

noData: {
    style: {
        fontWeight: 'bold',
        fontSize: '15px',
        color: '#303030'
    }
}

您需要包含来自 highcharts 的额外库 (modules/no-data-to-display.js),但这非常简单。

关于推送前的javascript条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283609/

相关文章:

xml - 如何使用 zillow.com API 将数据发送到 API 调用并将其取回

c# - XmlSerializer - 反射(reflect)类型时出错

javascript - Angular Material Design Layout 自定义尺寸

Javascript - 通过ajax获取文本并显示在链接中

javascript - 如何使用 jQuery 将单选按钮替换为图像?

javascript - jQuery 过滤每个不为空的字符串

xml - 为什么 xpath 位置选择表达式会返回多个节点?

javascript - 打印表格中的json数据

javascript - 如何在jsp中显示下拉框的值

javascript - window.location.href.match 不工作