Видимость значений объекта. Как?
Есть скрипт:
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, время: 12:42. |