2010-09-06 4 views
0

Я пытаюсь выбрать из нескольких записей в XML-файле и показать их на веб-странице. Я не могу понять, что я делаю неправильно ... есть ли у кого-нибудь предложения?Выберите случайную запись xml один раз для загрузки с jquery

Спасибо за ваше время :-)

<script type="text/javascript"> 

    var numLow = 1; 
    var numHigh = 3; 
    var adjustedHigh = (parseFloat(numLow))+1; 
    var numRand = Math.floor(Math.random()*adjustedHigh)+parseFloat(numLow); 

$.ajax({ 
type: 'GET', 
url: '../xml/testad.xml', 
dataType: 'xml', 
success: function(xml_list) { 

var xmlArr = []; 

$(xml_list).find('entry').each(function(i) { 
    var xml_id = $(this).attr('id'); 
    if(xml_id == numRand) return; //keep going if this wasn't the right ID 

    var xml_name  = $(this).find('name').text(); 
    var xml_link  = $(this).find('link').text(); 
    var xml_url   = $(this).find('url').text(); 
         // Add matched items to an array 
    xmlArr += '<div class="ad"><a href="'; 
    xmlArr += xml_url; 
    xmlArr += '" alt="' 
    xmlArr += xml_name; 
    xmlArr += '"><img src="'; 
    xmlArr += xml_link; 
    xmlArr += '" /></a></div>'; 

}); // end each loop 

//Append array to adviewer div (this way is much faster than doing this individually for each item) 

    $(xmlArr).appendTo('#adviewer'); 
    $('#adviewer').show(); 
} 
}); 
</script> 

Выше выглядит, как будто это должно "работать, но это не на самом деле выбрать случайную запись ...

<script type="text/javascript"> 

var numLow = 1; 
var numHigh = 3; 
var adjustedHigh = (parseFloat(numLow))+1; 
var numRand = Math.floor(Math.random()*adjustedHigh)+parseFloat(numLow); 

$.ajax({ 
type: 'GET', 
url: '../xml/testad.xml', 
dataType: 'xml', 
success: function(xml_list) { 

var xmlArr = []; 

$(xml_list).find('entry').each(function() { 

var xml_id  = $(this).attr('id'); 

var xml_name  = $(this).find('name').text(); 
var xml_link = $(this).find('link').text(); 
var xml_url = $(this).find('url').text(); 
     // Add matched items to an array 
xmlArr += '<div id=: ' 
xmlArr += xml_id; 
xmlArr += '"class="ad"><ahref="'; 
xmlArr += xml_url; 
xmlArr += '" title="' 
xmlArr += xml_name; 
xmlArr += '"><img class="ad" src="'; 
xmlArr += xml_link; 
xmlArr += '"></a></div>'; 

if(id == numRand).appendTo(div +' class="adviewer"'); 
} 

}); // end each loop 

</script> 
+0

Это может помочь, если вы указали симптомы. Синтаксические ошибки, неправильный вывод и т. Д. Также вы попробовали отладку с Firebug и проверили ответы? – NVRAM

ответ

0

Я думаю что вы после этого что-то вроде этого:

$(xml_list).find('entry').each(function(i) { 
    var xml_id = $(this).attr('id'); 
    if(i != numRand) return; //keep going if this wasn't the right ID 
    var xml_name = $(this).find('name').text(), 
     xml_link = $(this).find('link').text(), 
     xml_url = $(this).find('url').text(); 

    var div = $('<div />' { 'id': xml_id, 'class': 'ad' }); 
    div.append($('<a />', { 'href': xml_url, 'title': xml_name })); 
    div.append($('<img />', {'class': 'ad', 'src': xml_link })); 
    div.appendTo('div.adviewer'); 
}); // end each loop 

есть ток Ly несколько синтаксических ошибок, в основном с этим:

if(id == numRand).appendTo(div +' class="adviewer"'); 

.appendTo() вызывается на объект JQuery, чтобы добавить к чему-то, селектор для <div class="adviewer"> будет выглядеть div.adviewer, как я выше.

Остальные изменения центра вокруг перехода на метод создания элемента DOMдля кодирования дескриптора свойства и такого (если у вас есть цитата во всех, например). Также id не задан в вашем вопросе/коде ... Я Предполагая, вы имели в виду индекс здесь, если вы не изменили if(i != numRand) вместо if(xml_id == numRand), это будет сравнить с ID из XML.

+0

if (xml_id == numRand) return; было моим намерением. – chrisb

+0

Что является самым простым способом выбрать случайное число, основанное на количестве в xml? – chrisb

+0

@fchrisb - Это зависит от того, являются ли записи последовательно пронумерованными или они повсюду? Похоже, что выбор случайного индекса элемента '' будет более простым. –