Видимость значений объекта. Как?
Есть скрипт:
window.onload=function(){ notification.render.create(); } var notification={ properties:{ rootElement:"noticeContent", listElement:"notificationList", rssUrl:"http://www.server.com/rss/", rssFeed:{}, rssFeedCount:null, }, render:{ create:function(){ notification.kinematics.getRss(notification.properties.rssUrl); console.log(notification.properties.rssFeed); }, kinematics:{ getRss:function(url){ var rssXml=new XMLHttpRequest(); rssXml.open("GET",url,true); rssXml.send(null); rssXml.onreadystatechange=function(){ if(rssXml.readyState==4){ if(rssXml.status==200){ var xml=rssXml.responseXML; var count=xml.getElementsByTagName(notification.properties.rssTags.video).length; notification.properties.rssFeedCount=count; for(i=0;i<count;i++){ var item=xml.getElementsByTagName(notification.properties.rssTags.video)[i]; if(item.getElementsByTagName(notification.properties.rssTags.priority)[0].textContent=="1"){ notification.properties.currentTumb=i; } notification.properties.rssFeed[i]={ title:item.getElementsByTagName(notification.properties.rssTags.title)[0].textContent, linkToPage:item.getElementsByTagName(notification.properties.rssTags.linkToPage)[0].textContent, linkToImage:item.getElementsByTagName(notification.properties.rssTags.linkToImage)[0].textContent, description:item.getElementsByTagName(notification.properties.rssTags.description)[0].textContent, pubDate:item.getElementsByTagName(notification.properties.rssTags.pubDate)[0].textContent, priority:item.getElementsByTagName(notification.properties.rssTags.priority)[0].textContent }; } }else{return false} }else{return false} } } } Ситуация такова: мне нужно распарсить RSS и положить это все в объект, происходит следующее: прошу вывести в консоль значение notification.properties.rssFeed если я это делаю сразу после парсера в той же самой функции все нормально, если я вызываю в конце window.onload - все хреново, объект пустой - почему??? Помогите люди добрые ... |
Цитата:
|
Дзен-трансгуманист, ну сейчас же у него сначала наступает событие onload, затем только производится xhr.
bogong, в случаях с асинхронными действиями, нужно использовать callback'и. Например можно передать callback-функцию в notification.render.create(fn) а по получению rss - вызывать эту функцию |
Цитата:
я решил попробовать через наблюдателя сделать ..., попробую что получится |
bogong, походу не о том callback вы подумали )
window.onload=function(){ notification.render.create(function(){ console.log(notification.properties.rssFeed); }); } var notification={ properties:{ rootElement:"noticeContent", listElement:"notificationList", rssUrl:"http://www.server.com/rss/", rssFeed:{}, rssFeedCount:null, }, render:{ create:function(onload){ notification.kinematics.getRss(notification.properties.rssUrl, onload || function(){}); console.log(notification.properties.rssFeed); }, kinematics:{ getRss:function(url, onload){ var rssXml=new XMLHttpRequest(); rssXml.open("GET",url,true); rssXml.send(null); rssXml.onreadystatechange=function(){ if(rssXml.readyState==4){ if(rssXml.status==200){ var xml=rssXml.responseXML; var count=xml.getElementsByTagName(notification.properties.rssTags.video).length; notification.properties.rssFeedCount=count; for(i=0;i<count;i++){ var item=xml.getElementsByTagName(notification.properties.rssTags.video)[i]; if(item.getElementsByTagName(notification.properties.rssTags.priority)[0].textContent=="1"){ notification.properties.currentTumb=i; } notification.properties.rssFeed[i]={ title:item.getElementsByTagName(notification.properties.rssTags.title)[0].textContent, linkToPage:item.getElementsByTagName(notification.properties.rssTags.linkToPage)[0].textContent, linkToImage:item.getElementsByTagName(notification.properties.rssTags.linkToImage)[0].textContent, description:item.getElementsByTagName(notification.properties.rssTags.description)[0].textContent, pubDate:item.getElementsByTagName(notification.properties.rssTags.pubDate)[0].textContent, priority:item.getElementsByTagName(notification.properties.rssTags.priority)[0].textContent }; } onload(); }else{return false} }else{return false} } } } |
Часовой пояс GMT +3, время: 15:32. |