2016-02-28 1 views
0

Я пытаюсь вывести только статьи, если authorsId = authorId.Функция для возврата списка - проблема с фильтрацией вывода

Помимо этого вся функция работает точно так же, как я хочу, вот это:

Общая идея заключается в том, чтобы ограничить доступ только собственные статьи.

Итак, мой вопрос: как ограничить результаты показом только статей, написанных владельцем страницы, на которой мы находимся (authorsId = authorId).

function ArticlesListReturn(returned) { 
    xml = returned.documentElement; 
    var rel = document.getElementById('related_category_articles'); 
    rel.options.length = 0; 
    var status = getXMLData('status'); 
    var title = ''; 
    var id = ''; 
    var authorid = ''; 


    if (status == 0) { 
     alert("%%LNG_jsArticleListError%%" + errormsg); 
    } else { 
     var authorid = document.getElementById("authorid").value; // Serge 

     // authorsid = getNextXMLData('authors',x); 
     for (var x = 0; x < xml.getElementsByTagName('titles').length; x++) { 


     title = getNextXMLData('titles', x); 
     id = getNextXMLData('ids', x); 
     authorsid = getNextXMLData('authors', x); 

     alert(authorsid) // authors of each article - it returns the proper values 
     alert(authorid) // author of the page we are on - it returns the proper value 

     var count = 0; 

     rel.options[x] = new Option(title, id, authorid); // lign that returns results 

     title = ''; 
     id = ''; 
     authorid = ''; 

     } 
} 
+0

У вас все еще есть свободные 'rel.options' – mplungjan

+0

@mplungjan Я обновил. Что касается вашего вопроса о getNextXMLData, это связано с чем-то другим (после создания списка), я думаю, что это не имеет отношения к вопросу. rel.options (не уверен, чтобы понять). – Sergelie

+0

'rel.options <<< нужно перейти - следующая строка var count = 0;' – mplungjan

ответ

0

Я подозреваю, что проблема в том, когда вы попробуйте выполнить условный оператор (если/то/другое), что вы сравниваете число в строку (или строки в число). Это похоже на сравнение if (1 == "1") (обратите внимание, что двойные кавычки только с одной стороны, потому что левое будет числовым, правая часть уравнения будет строкой).

Я добавил тест, который должен заставлять оба значения быть строками, а затем их сравнивать. Если это все еще вызывает проблемы, убедитесь, что в одну переменную не добавлены пробелы/вкладки, но отсутствуют в другой переменной.

Кроме того, я изменил ваше «предупреждение» для вывода на консоль (CTRL + SHIFT + J, если вы используете firefox). Проблема с использованием предупреждения иногда удаляет данные, когда это необходимо, но кнопка предупреждения создает паузу во время чтения данных. Итак ... если вы используете предупреждение, ваш код работает, то вы удаляете предупреждение, ваш код может выявлять новые ошибки (поскольку удаленные данные не были выполнены вовремя). Теперь это может не быть проблемой, но может быть проблемой для вас в будущем.

Удачи!

function ArticlesListReturn(returned) { 
    xml = returned.documentElement; 
    var rel = document.getElementById('related_category_articles'); 
    rel.options.length = 0; 
    var status = getXMLData('status'); 
    var title = ''; 
    var id = ''; 
    var authorid = ''; 


    if (status == 0) { 
     alert("%%LNG_jsArticleListError%%" + errormsg); 
    } else { 
     var authorid = document.getElementById("authorid").value; // Serge 

     // authorsid = getNextXMLData('authors',x); 
     for (var x = 0; x < xml.getElementsByTagName('titles').length; x++) { 


     title = getNextXMLData('titles', x); 
     id = getNextXMLData('ids', x); 
     authorsid = getNextXMLData('authors', x); 

     console.log("authorsid = "+authorsid); // authors of each article - it returns the proper values 
     console.log("authorid = "+authorid); // author of the page we are on - it returns the proper value 


if(authorsid.toString() == authorid.toString()) 
{ 

     rel.options 
     var count = 0; 
console.log(authorsid.toString()+" equals "+authorid.toString()); 
     rel.options[rel.options.length] = new Option(title, id, authorid); // lign that returns results 

}  
else 
{ 
    console.log(authorsid.toString()+" NOT equals "+authorid.toString()); 
} 


     title = ''; 
     id = ''; 
     authorid = ''; 

     } 

Вы проверяли консоль для сообщений? Правильно ли он показывал автора и автора?

Я редактировал сценарий и сделал несколько дополнений ...

  1. Консоль сообщит вам, если условная проверка работала или нет (то есть вы получите сообщение для каждой записи). См. Раздел «if/else» и дополнительные «console.log», которые я добавил?

  2. rel.options [x] изменен равным rel.options [rel.options.length]. Мне любопытно, почему вы устанавливаете rel.options.length = 0, когда я вместо этого сделал rel.options = new Array();

+0

Спасибо за предложения. Ваше решение возвращает пустой список. Я пытаюсь понять это. – Sergelie

+0

Да, я сделал, он возвращает один раз оба (authorid и authorid), а для остальных он возвращает авторов с пробелом для authorid. И общий результат снова является пустым списком. Это связано с вашими последними изменениями. Таким образом, выражение if не применяется к каждой статье. – Sergelie

+1

if (authorsid.toString() == autorid) <- это небольшое изменение, сделанное решением fjprojects! Спасибо всем! – Sergelie

Смежные вопросы