2016-10-09 2 views
-1

Ich möchte das XML-Dokument in einem festen Intervall gelesen werden, und vermeiden Sie vollständige Seitenaktualisierung jedes Mal, wenn es nach Updates sucht. Der Code, der auskommentiert ist, funktioniert, aber verwirft den JQuery-Zyklus. (basierend auf http://buildinternet.com/project/totem/) Brauchen Sie etwas Hilfe mit diesem.Ajax Refresher für XMLhttprequest

//function refresh() 
// { 

var xhttp = new XMLHttpRequest(); 

xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     myFunction(this); 
    } 
}; 

xhttp.open("GET", "drift.xml", true); 
xhttp.send(); 

// } 
function myFunction(xml) { 
    var xmlDoc = xml.responseXML; 
     var item = xmlDoc.getElementsByTagName("item"); 
     var itemlength = item.length; 
     var i; 
     var html=''; 
     var today = new Date(); 

     var aktuella = []; 
     $("#wrapper").append('<ul id=\'wrap\'></ul>'); 

     for (i = 0; i < itemlength; i++) { 
     var postDate = xmlDoc.getElementsByTagName("expires")[i].childNodes[0].nodeValue; 
     var date = postDate.substring(8, 10); 
     var month = postDate.substring(5, 7); 
     var year = postDate.substring(0, 4); 
     var expiredDate = new Date(year, month - 1, date); 

     if (expiredDate > testDate) { 
     aktuella.push(i); 
     } 
    }; 

    if (aktuella.length == 0) { 
     var none = "<p>Info</p>"; 
     $('#wrapper').prepend(none); 
    }; 

    if (aktuella.length == 1) { 
     var expires = '<p>' + xmlDoc.getElementsByTagName("expires")[0].parentNode.childNodes[1].textContent + '</p>'; 
     $('#wrapper').prepend(expires); 
    }; 

    if (aktuella.length > 1) { 
     for (i = 0; i < aktuella.length; i++) { 
     var expires = '<li id="' + i + '">' + xmlDoc.getElementsByTagName("expires")[i].parentNode.childNodes[1].textContent + ' - Se Driftinfo</li>'; 
     $('#wrap').prepend(expires); 
     }; 
    }; 


    $(function(){ 
     $('#wrap').totemticker({ 
      row_height : '120px', 
      next  : '#ticker-next', 
      previous : '#ticker-previous', 
      stop  : null, 
      start  : null, 
      mousestop : true, 
      }); 
     }); 
    } 

    // refresh(); 
    // setInterval("refresh()", 5000); 
    </script> 

Antwort

0

Ganz einfach: Fügen Sie dieses Skript Ti:

setInterval(function(){ 
var xhttp = new XMLHttpRequest(); 

xhttp.onreadystatechange = function() { 
if (this.readyState == 4 && this.status == 200) { 
    myFunction(this); 
} 
}; 
}, milliseconds); 
+0

Funktioniert leider nicht. Kein xml wird überhaupt geladen – oceansmoving

+0

hast du Millisekunden durch was ersetzt? 1000 zum Beispiel? dass 1 Sekunde –

+0

Yes: setInterval (function() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction (this); \t \t } \t}; }, 5000); – oceansmoving

0

versuchen jetzt mit diesem. Da war ein Fehler. funtion stattdessen Funktion und das Intervall nach der Funktion aufzurufen

function myFunction(xml) { 
var xmlDoc = xml.responseXML; 
    var item = xmlDoc.getElementsByTagName("item"); 
    var itemlength = item.length; 
    var i; 
    var html=''; 
    var today = new Date(); 

    var aktuella = []; 
    $("#wrapper").append('<ul id=\'wrap\'></ul>'); 

    for (i = 0; i < itemlength; i++) { 
    var postDate = xmlDoc.getElementsByTagName("expires") [i].childNodes[0].nodeValue; 
    var date = postDate.substring(8, 10); 
    var month = postDate.substring(5, 7); 
    var year = postDate.substring(0, 4); 
    var expiredDate = new Date(year, month - 1, date); 

    if (expiredDate > testDate) { 
    aktuella.push(i); 
    } 
}; 

setInterval(function(){ 
var xhttp = new XMLHttpRequest(); 

xhttp.onreadystatechange = function() { 
if (this.readyState == 4 && this.status == 200) { 
myFunction(this); 
} 
}; 
xhttp.open("GET", "drift.xml", true); 
xhttp.send(); 
}, milliseconds); 
+0

funktioniert nicht xhttp.open ("GET", "drift.xml", true); xhttp.send(); ist nicht Teil der Funktion passiert nichts. Überprüfen Sie meinen ursprünglichen Beitrag, der beschreibt, was passiert, wenn Sie hinzufügen Es funktioniert, aber der Totempicker-Zyklus wird durcheinander gebracht – oceansmoving

+0

Es scheint, der Code funktioniert gut.Warten Sie nur die ersten fünf Sekunden.Sie können die Funktion auf Last und spät aufrufen r nach 5 Sekunden läuft die Schriftrolle –

+0

Schauen Sie sich meine Post unter – oceansmoving

0

Hier ist die Website ohne jeden Versuch, die Ajax zu aktualisieren:

http://socialsiberia.com/dash/test1.html

Und hier ist das seltsame Verhalten, das auftritt, wenn ich hinzufügen der folgende Code:

http://socialsiberia.com/dash/test2.html

setInterval(function(){ 
var xhttp = new XMLHttpRequest(); 

xhttp.onreadystatechange = function() { 
if (this.readyState == 4 && this.status == 200) { 
    myFunction(this); 
     } 
    }; 

xhttp.open("GET", "test.xml", true); 
xhttp.send(); 

}, 5000); 
0
var xhttp = new XMLHttpRequest();  
function myFunction(xml) { 
var xmlDoc = xml.responseXML; 
    var item = xmlDoc.getElementsByTagName("item"); 
    var itemlength = item.length; 
    var i; 
    var html=''; 
    var today = new Date(); 

    var aktuella = []; 
    $("#wrapper").append('<ul id=\'wrap\'></ul>'); 

    for (i = 0; i < itemlength; i++) { 
    var postDate = xmlDoc.getElementsByTagName("expires")[i].childNodes[0].nodeValue; 
    var date = postDate.substring(8, 10); 
    var month = postDate.substring(5, 7); 
    var year = postDate.substring(0, 4); 
    var expiredDate = new Date(year, month - 1, date); 

    if (expiredDate > testDate) { 
    aktuella.push(i); 
    } 
}; 

if (aktuella.length == 0) { 
    var none = "<p>Info</p>"; 
    $('#wrapper').prepend(none); 
}; 

if (aktuella.length == 1) { 
    var expires = '<p>' + xmlDoc.getElementsByTagName("expires")[0].parentNode.childNodes[1].textContent + '</p>'; 
    $('#wrapper').prepend(expires); 
}; 

if (aktuella.length > 1) { 
    for (i = 0; i < aktuella.length; i++) { 
    var expires = '<li id="' + i + '">' + xmlDoc.getElementsByTagName("expires")[i].parentNode.childNodes[1].textContent + ' - Se Driftinfo</li>'; 
    $('#wrap').prepend(expires); 
    }; 
}; 


$(function(){ 
    $('#wrap').totemticker({ 
     row_height : '120px', 
     next  : '#ticker-next', 
     previous : '#ticker-previous', 
     stop  : null, 
     start  : null, 
     mousestop : true, 
     }); 
    }); 
} 

funtion makeinterval(){ 

xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    myFunction(this); 
} 
}; 
xhttp.open("GET", "drift.xml", true); 
xhttp.send(); 
} 

setInterval(function(){ 
makeInterval(); 
}, 5000); 
makeinterval() 
+0

Dies ist das Ergebnis des oben genannten: http://socialsiberia.com/dash/test2.html – oceansmoving

Verwandte Themen