Получить все подходящие результаты из XML-файла с помощью jQuery по ключу - PullRequest
0 голосов
/ 05 сентября 2011

Я новичок в XML и AJAX, поэтому мне было интересно, как я могу получить совпадающие результаты из файла XML, когда я печатаю.У меня есть пример кода, который работает относительно хорошо, но он дублирует мои результаты каждый раз при вводе каждой буквы, поэтому кто-нибудь может мне помочь исправить это?* JS:

$(document).ready( function() {
var n_ime=new Array();
num_div=0;
$("#stuff, #stuff2").hide();
$('form input').keyup(function() {
unos=$(this).val();
if (unos!=""){
$.ajax({
type:"GET",
url:"file.xml",
dataType:"xml",
success: function(xml) {
    $(xml).find('osoba').each( function() {
    ime=$(this).find('ime').text();
    trazi=new RegExp(unos,"i"); 
    if((trazi.test(ime))==true)
    {
    prezime=$(this).find('prezime').text(); 
    adresa=$(this).find('adresa').text();
    $("#stuff").append('<div><p>Ime: '+ime+'</p>','<p>Prezime: '+prezime+'</p>','<p>Adresa: '+adresa+'</p></div>');
    $("#stuff").dequeue().fadeIn(500);
    };
    });
}
});
            } /* if (unos!="") kraj uslova */
else{
$("#stuff").dequeue().stop(true,true).fadeOut(500,function(){
$("#stuff p").remove();
});
}




});
});

Код работает до сих пор, попробуйте его, набрав «Zoran» или «Zora», и вы увидите, в чем проблема, результаты дублируются постоянно, поэтомуспособ как-то это исправить и убрать лишние результаты?

1 Ответ

1 голос
/ 05 сентября 2011

Если xml-файл статичен, я бы начал с его загрузки только один раз, когда страница загружается впервые, чтобы он не вызывался, не загружался и не анализировался каждый раз. Я собираюсь вставить весь кусок javascript здесь, но важный бит - это то, где я установил $("#stuff").html('');, который очищает содержимое # stuff.

$(document).ready(function() {
    var xml = '';
    $.ajax({
      url: "file.xml",
      success: function(data) { xml = $(data) },
      dataType: 'xml'
    });
    var n_ime = new Array();
    num_div = 0;
    $("#stuff, #stuff2").hide();
    $('form input').keyup(function() {
        unos = $(this).val();
        if (unos != "") {
            $('#stuff').html('');
            xml.find('osoba').each(function() {
                ime = $(this).find('ime').text();
                trazi = new RegExp(unos, "i");
                if ((trazi.test(ime)) == true)
                {
                    prezime = $(this).find('prezime').text();
                    adresa = $(this).find('adresa').text();
                    $("#stuff").append('<div><p>Ime: ' + ime + '</p>', '<p>Prezime: ' + prezime + '</p>', '<p>Adresa: ' + adresa + '</p></div>');
                    $("#stuff").dequeue().fadeIn(500);
                };
            });

        }
        /* if (unos!="") kraj uslova */
        else {
            $("#stuff").dequeue().stop(true, true).fadeOut(500,
            function() {
                $("#stuff p").remove();
            });
        }
    });
});
...