JQuery XML через AJAX: иногда отсутствуют некоторые узлы - PullRequest
3 голосов
/ 03 января 2012

У меня есть график, который опрашивает данные через ajax из XML-документа. Я использую режим: time for x axis. Он работает нормально, за исключением периодически, некоторые значения из xml Document удаляются. Вот код, который выбирает xml через ajax.

function graphUpdate() { 
    $.ajax( { 
        url: "EnergyDM.xml",
        type:"GET",
        dataType: "XML",
        success: onxmlReceived,
        error: function(xhr, textStatus, errorThrown)
        { 
            alert(textStatus + ' ' + errorThrown);
        }
    });
    // setTimeout(graphUpdate,10000);   
}   

function onxmlReceived(data) {

    var xmlData = null;

    //for Non IE Browsers
    if(window.DOMParser) {
        //xmlData = data;
        parser = new DOMParser();
        xmlData = parser.parseFromString(data, "text/xml");
    }

    // For IE
    else {
        xmlData = new ActiveXObject("Microsoft.XMLDOM");
        xmlData.async = false;
        xmlData.loadXML(data);
    } 

    $(xmlData).find('energyDM').each(function(){
        Rec_Count = parseInt($(this).find('edNum').text());
        d1=[];
        for(var i = 0; i < Rec_Count; i++) {
            if(i < 10) { 
                d1.push([(parseInt($(this).find('et000'+i).text(),10))*1000,
                    parseFloat($(this).find('ed000'+i).text())]);
            } else if(i < 100) {
                d1.push([(parseInt($(this).find('et00'+i).text(),10))*1000,
                    parseFloat($(this).find('ed00'+i).text())]);
            } else {  
                d1.push([(parseInt($(this).find('et0'+i).text(),10))*1000,
                    parseFloat($(this).find('ed0'+i).text())]);
            }   
        }
        plotWithOptions();
    });

}

XML-файл выглядит так:

<energyDM>
  <edNum>305</edNum>
  <TMF>UTC </TMF>
  <pm339> 1.271</pm339><!-- pm339 max energy demand value -->
  <pm340>1325033716</pm340><!-- pm340 max energy demand occured time -->
  <ed0000> 0.282</ed0000>
  <et0000>1325545093</et0000>
  <ed0001> 0.283</ed0001>
  <et0001>1325544792</et0001>
  <ed0002> 0.284</ed0002>
  <et0002>1325544492</et0002>
  ...
  <ed0305> 0.284</ed0305>
  <et0305>1325544492</et0305>
</energyDM>

Когда возвращаемый XML пропускает узлы, если я использую Chrome для просмотра значений, он показывает что-то вроде:

  <ed0023> 0.283</ed0023>
  <et0023>1325538176</et0023>
  <ed0024> 0.281</ed0024>
  <et0024>1325537875</et0024>
  <ed0035> 0.281</ed0035>
  <et0035>1325534564</et0035>
  <ed0036> 0.280</ed0036>
  <et0036>1325534263</et0036>

И это не всегда происходит. Если я продолжу обновлять страницу, она может отбросить несколько узлов, затем всплыть все это и т. Д. И не всегда удаляются одни и те же узлы.

Буду признателен за любые подсказки.

1 Ответ

0 голосов
/ 16 февраля 2012

Как подсказывает @MArk, проблема была в генерации XML.Процессор из микрочипа, который обрабатывает XML-файл, использует стек, который вызывал некоторые ошибки, когда несколько обращений к серверу было одновременно.Когда это происходит, последующие прерывания обрабатываются без полной заботы о текущем действии.Это было найдено и исправлено, и теперь XML-это хорошо.

...