Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт с парсингом xml (https://javascript.ru/forum/misc/37878-skript-s-parsingom-xml.html)

bona 12.05.2013 14:17

Скрипт с парсингом xml
 
Всем привет. У меня проблема со скриптом,который выводит темы форума пользователя сайта ucoz. Вот код.
<div id="test"></div> 
 <script type="text/javascript"> 
 $.get( 
 'http://zveriki.ucoz.com/api/forum/0-1-1-3-2', 
 function(data){ 
 
 var mydata = new Array(); 
 var i = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_LINK'){ 
 if(mydata[$(this).text()] == undefined) mydata[$(this).text()] = new Array(); 
 mydata[$(this).text()][i] = $(this).next().text(); 
 i++; 
 } 
 });
var mydata2 = new Array(); 
 var i2 = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_NAME'){ 
 if(mydata2[$(this).text()] == undefined) mydata2[$(this).text()] = new Array(); 
 mydata2[$(this).text()][i2] = $(this).next().text(); 
 i2++; 
 } 
 });
for(var i3=0;i3<mydata.length;i3++){
 $('#test').html('<a href="'+mydata['TOPIC_LINK'][i3]+'">'+mydata2['TOPIC_NAME'][i3]+'</a> ');
}
 }, 
 'xml' 
 ); 
 </script>


Внимание прошу обратить на последний цикл,т.к. без него,к примеру,вот так,все работает нормально:
<div id="test"></div> 
 <script type="text/javascript"> 
 $.get( 
 'http://zveriki.ucoz.com/api/forum/0-1-1-3-2', 
 function(data){ 
 
 var mydata = new Array(); 
 var i = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_LINK'){ 
 if(mydata[$(this).text()] == undefined) mydata[$(this).text()] = new Array(); 
 mydata[$(this).text()][i] = $(this).next().text(); 
 i++; 
 } 
 });
var mydata2 = new Array(); 
 var i2 = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_NAME'){ 
 if(mydata2[$(this).text()] == undefined) mydata2[$(this).text()] = new Array(); 
 mydata2[$(this).text()][i2] = $(this).next().text(); 
 i2++; 
 } 
 });
 $('#test').html('<a href="'+mydata['TOPIC_LINK'][1]+'">'+mydata2['TOPIC_NAME'][1]+'</a> ');
 }, 
 'xml' 
 ); 
 </script>

vadim5june 12.05.2013 14:52

и что не работает?
какая структура xml-файла?

bona 12.05.2013 15:27

vadim5june,xml тут ни при чем. Чисто со скриптом проблема,без цикла робит,с циклом - нет,возможно,с синтаксисом что-то не то.

vadim5june 12.05.2013 15:32

Цитата:

Сообщение от bona (Сообщение 250013)
vadim5june,xml тут ни при чем. Чисто со скриптом проблема,без цикла робит,с циклом - нет,возможно,с синтаксисом что-то не то.

да понял-но он выводит последний элемент?
Надо что то типа
var t='';
for(var i3=0;i3<mydata.length;i3++){
t+='<a href="'+mydata['TOPIC_LINK'][i3]+'">'+mydata2['TOPIC_NAME'][i3]+'</a> ';};
$('#test').html(t);

bona 12.05.2013 15:50

vadim5june,не,скрипт вообще ничего не выводит,с вашим кодом тоже. Но я тут поэкспериментировала: если написать вместо i3<mydata.length i3<=mydata.length,один элемент все же выводится,но там должен быть далеко не один.

vadim5june 12.05.2013 15:57

Цитата:

Сообщение от bona
один элемент все же выводится,но там должен быть далеко не один.

Потому что каждый $('#test').html('... затирает предыдущий
надо $('#test').append('.... тогда добавлять будет
ну или как у меня-я там исправил попробуйте еще

bona 12.05.2013 16:04

С append та же фигня. В коде все верно?
var t='';
for(var i3=0;i3<=mydata.length;i3++){
t+='<a href="'+mydata['TOPIC_LINK'][i3]+'">'+mydata2['TOPIC_NAME'][i3]+'</a> ';};
$('#test').append(t);

vadim5june 12.05.2013 16:10

все верно только равно не надо таки i3<mydata.length
поставьте alert
for(var i3=0;i3<mydata.length;i3++){alert(t);...

bona 12.05.2013 16:14

Ничего не выводит,а если написать <=,то пустой alert.

vadim5june 12.05.2013 16:17

удалил

vadim5june 12.05.2013 16:24

надо так
for(var i3=0;i3<mydata['TOPIC_LINK'].length;i3++){alert(t);...

bona 12.05.2013 16:25

Вы про
$('#test').html('<a href="'+mydata['TOPIC_LINK'][1]+'">'+mydata2['TOPIC_NAME'][1]+'</a> ');
?
Да,там работает и с 0.

bona 12.05.2013 16:28

vadim5june,
теперь все работает,спасибо вам большое!

vadim5june 12.05.2013 16:28

простая ошибка что то парились долго

bona 16.05.2013 13:36

С данным скриптом возникло еще одно затруднение. Код скрипта сейчас такой:
<div id="test"></div> 
 <script type="text/javascript"> 
 $.get( 
 'http://zveriki.ucoz.com/api/forum/0-1-1-3-$USER_ID$', 
 function(data){ 
 
 var mydata = new Array(); 
 var i = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_LINK'){ 
 if(mydata[$(this).text()] == undefined) mydata[$(this).text()] = new Array(); 
 mydata[$(this).text()][i] = $(this).next().text(); 
 i++; 
 } 
 });
var mydata2 = new Array(); 
 var i2 = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='TOPIC_NAME'){ 
 if(mydata2[$(this).text()] == undefined) mydata2[$(this).text()] = new Array(); 
 mydata2[$(this).text()][i2] = $(this).next().text(); 
 i2++; 
 } 
 });
var mydata3 = new Array(); 
 var i3 = 0; 
 $('name', data).each(function(){ 
 if($(this).text()=='FORUM_NAME'){ 
 if(mydata3[$(this).text()] == undefined) mydata3[$(this).text()] = new Array(); 
 mydata3[$(this).text()][i3] = $(this).next().text(); 
 i3++; 
 } 
 });
var t='';
for(var i4=0;i4<mydata['TOPIC_LINK'].length;i4++){
if(mydata3['FORUM_NAME'][i4]=='Игра &quot;зверики&quot;'){
t+='<a href="'+mydata['TOPIC_LINK'][i4]+'">'+mydata2['TOPIC_NAME'][i4]+'</a><br>';
}

};
$('#test').append(t);

if(t=''){
$('#test').append('У вас пока нет зверика');
}
 }, 
 'xml' 
 ); 
 </script>


Мне нужно вывести текст,если у пользователя нет тем в форуме "Игра зверики". Для этого я использую условие в конце скрипта,оно работает,но только,если если есть другие темы. Если тем нет совсем,xml принимает вид:
<methodResponse>
<params>
<param>
<value>
<array>
<data>
</data>
</array>
</value>
</param>
</params>
</methodResponse>


Насколько я понимаю,при этом массивы mydata остаются пустыми. Тогда последее условие не срабатывает. Как можно это исправить?

vadim5june 16.05.2013 17:08

попробуйте после 34 строчки
if(!mydata['TOPIC_LINK']){$('#test').append('У вас пока нет зверика');
return};

а снизу уберите

bona 17.05.2013 12:31

Спс,помогло.


Часовой пояс GMT +3, время: 07:41.