searchXML이라는 분리 된 함수에서 일부 매개 변수가 전달되고 매개 변수를 기반으로 특정 값을 반환하고 해당 값을 개체에 저장하도록 XML 파일을 구문 분석합니다. 그런 다음 다른 함수에서 searchXML()을 호출하고 결과를 객체에 저장합니다. 불행히도, 그 객체는 비어있는 것으로 나타났습니다. 나는 상대적으로 자바 스크립트에 익숙하지 않기 때문에 오류를 일으키는 내 논리 또는 구문인지 확실하지 않습니다.Javascript - 함수의 결과를 객체에 저장하려고합니다. 개체가 null입니다.
XML은이 형식에 :
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Row>
<Tab>MF_Act</Tab>
<Category>Product Store Sessions </Category>
<_2013_01_31>1</_2013_01_31>
<_2013_02_28>2</_2013_02_28>
<_2013_03_31>3</_2013_03_31>
<_2013_04_30>4</_2013_04_30>
<_2013_05_31>5</_2013_05_31>
<_2013_06_30>6</_2013_06_30>
<_2013_07_31>7</_2013_07_31>
<_2013_08_31>8</_2013_08_31>
<_2013_09_30>9</_2013_09_30>
<_2013_10_31>10</_2013_10_31>
<_2013_11_30>11</_2013_11_30>
<_2013_12_31>12</_2013_12_31>
<FY_2013>x</FY_2013>
<_2014_01_31>1</_2014_01_31>
<_2014_02_28>2</_2014_02_28>
<_2014_03_31>3</_2014_03_31>
<_2014_04_30>4</_2014_04_30>
<_2014_05_31>5</_2014_05_31>
<_2014_06_30>6</_2014_06_30>
<_2014_07_31>7</_2014_07_31>
<_2014_08_31>8</_2014_08_31>
<_2014_09_30>9</_2014_09_30>
<_2014_10_31>10</_2014_10_31>
<_2014_11_30>11</_2014_11_30>
<_2014_12_31>12</_2014_12_31>
<FY_2014>y</FY_2014>
</Row>
<Row>
<Tab>MF_Act</Tab>
<Category>YTD</Category>
<_2013_01_31>1</_2013_01_31>
<_2013_02_28>2</_2013_02_28>
<_2013_03_31>3</_2013_03_31>
<_2013_04_30>4</_2013_04_30>
<_2013_05_31>5</_2013_05_31>
<_2013_06_30>6</_2013_06_30>
<_2013_07_31>7</_2013_07_31>
<_2013_08_31>8</_2013_08_31>
<_2013_09_30>9</_2013_09_30>
<_2013_10_31>10</_2013_10_31>
<_2013_11_30>11</_2013_11_30>
<_2013_12_31>12</_2013_12_31>
<FY_2013>r</FY_2013>
<_2014_01_31>1</_2014_01_31>
<_2014_02_28>2</_2014_02_28>
<_2014_03_31>3</_2014_03_31>
<_2014_04_30>4</_2014_04_30>
<_2014_05_31>5</_2014_05_31>
<_2014_06_30>6</_2014_06_30>
<_2014_07_31>7</_2014_07_31>
<_2014_08_31>8</_2014_08_31>
<_2014_09_30>9</_2014_09_30>
<_2014_10_31>10</_2014_10_31>
<_2014_11_30>11</_2014_11_30>
<_2014_12_31>12</_2014_12_31>
<FY_2014>t</FY_2014>
</Row>
</Root>
그리고 내 searchXML 코드 :
function searchXML(xml, goalTab, goalCategory){
console.log('in search xml');
//get the current year in 4 digits (yyyy)
var year = new Date().getFullYear();
//gets the string value of the 2 digit number of the previous completed month (ie: currMonth = April (04), prevMonth = March (03))
var prevMonth = new Date().getMonth().toString();
if(prevMonth.toString().length == 1){
prevMonth = '0'+prevMonth.toString();
}
//check for leap year
if(year % 4 == 0){
var feb = 29;
}else{
var feb = 28;
}
//make array for number of days per month in this year
var daysInMonths = [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
//get the row offset for the particular month
var rowOffset_Month = (year - 2013)*12 + 2 + parseInt(prevMonth);
var result = null;
$(xml).find('Row').each(function(){ // for each Row in xml
console.log('-------new row------')
var row = this;
var boolTab = $(row).find('Tab').text() == goalTab;
var boolCategory = $(row).find('Category').text() == goalCategory;
console.log(boolCategory);
console.log(boolTab);
if (boolCategory && boolTab) {
console.log('found match');
var result= {
//get the row that corresponds with the calculated row offset
//month : arr[rowOffset_Month][i],
month : $(row).find('_'+year+'_'+prevMonth+'_'+daysInMonths[parseInt(prevMonth) - 1]).text(), //-----------------check for errors here--------------------
//get the last row, which corresponds with the 2014 ytd
// ytd : arr[arr[1].length - 1][i]
ytd : $(row).find('FY_' + year).text() //-----------------check for errors here--------------------
}; //END result obj
};// END if
});// END jquery function
return result;
};
그리고 별도의 함수 :
var ann_appStarts_plan = searchXML(xml, "MF_Act", "Product Store Sessions ");
console.log('plan month: ' + ann_appStarts_plan.month);
console.log('plan ytd: ' + ann_appStarts_plan.ytd);
그리고 방화범에 오류 :
TypeError: ann_appStarts_plan is null
console.log('plan month: ' + ann_appStarts_plan.month);
어떻게 문제를 해결하겠습니까? xml의 특정 요소를 찾기 위해 JQuery를 사용하는 동기식 방법이 있습니까? – YazanLpizra
'find()'호출에 대해 비동기적인 것은 없습니다. Ajax 또는 다른 네트워크 서비스 호출이 아닙니다. –