[JS]xmlhttp in Firefox: undefined
Ik ben zo wat aan het experimenteren met ajax en onderstaand werkt met een xml bestand. De code werkt perfect in IE en Opera maar in Firefox krijg ik 'undefined' ipv 'article 1'. Hoe komt dit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?
function getXml(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open("GET", "news.xml",true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.status=="200"){
ticker(xmlhttp.responseXML,true);
}
}
}
xmlhttp.send(null);
}
function ticker(xml,update){
var nodes = xml.getElementsByTagName('article');
var i = 0;
setInterval(
function(){
if(i<nodes.length){
document.getElementById('news').innerHTML = nodes[i].text;
i++;
}
else{
update = false;
}
},3000,update==true);
}
function news(){
getXml();
}
window.onload=function(){news();}
?>
function getXml(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open("GET", "news.xml",true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.status=="200"){
ticker(xmlhttp.responseXML,true);
}
}
}
xmlhttp.send(null);
}
function ticker(xml,update){
var nodes = xml.getElementsByTagName('article');
var i = 0;
setInterval(
function(){
if(i<nodes.length){
document.getElementById('news').innerHTML = nodes[i].text;
i++;
}
else{
update = false;
}
},3000,update==true);
}
function news(){
getXml();
}
window.onload=function(){news();}
?>
Gewijzigd op 01/01/1970 01:00:00 door Tom Beuckelaere
bounce
Zegt je firefox fouten console (onder het menuutjes 'extra's' te vinden) ook iets erover?
Probeer ook eens 'console.log(nodes[i])' net voor je document.getElementById('news') regel. Wat geeft die voor uitvoer in de fouten console?
Nog een aanrader: Firebug
Probeer ook eens 'console.log(nodes[i])' net voor je document.getElementById('news') regel. Wat geeft die voor uitvoer in de fouten console?
Nog een aanrader: Firebug
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Om het te onderstrepen, de FireBug plugin voor mozilla firefox is voor mij een uiterst mooie oplossing om mijn Javascript implementatie 's te testen. Sinds ik dit gebruik was de drempel weg om zelf Javascript code te ontwikkelen.
Maar ik ben geen javascript guru, ik geef dan ook een conclusie op basis van een voorgevoel, maar ik zou verwachten iets als, gezien ik dit ook gebruik om mijn AJAX compatible te maken voor mozilla en safari.
Maar ik ben geen javascript guru, ik geef dan ook een conclusie op basis van een voorgevoel, maar ik zou verwachten iets als, gezien ik dit ook gebruik om mijn AJAX compatible te maken voor mozilla en safari.
Dat kan je overigens ook fixen door de volgende code toe te voegen aan je PHP script dat door je XHR object wordt opgevraagd:
Maar dat is inderdaad vaak de oplossing voor het probleem. In Firefox bestaat de eigenschap responseXML niet waneer het antwoord geen (geldige) xml is. Dan kan je er alleen in rondploeteren via responseText.
Code (php)
Maar dat is inderdaad vaak de oplossing voor het probleem. In Firefox bestaat de eigenschap responseXML niet waneer het antwoord geen (geldige) xml is. Dan kan je er alleen in rondploeteren via responseText.
Onderstaande functie geeft in elke browser de tekstinhoud
terug voor een DOM node (dus ook in een HTML document).
terug voor een DOM node (dus ook in een HTML document).
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
// In je loop
document.getElementById('news').innerHTML = nodeText(nodes[i]);
function nodeText(n) {
return n.nodeValue || n.textContent || n.innerText || n.text;
}
?>
// In je loop
document.getElementById('news').innerHTML = nodeText(nodes[i]);
function nodeText(n) {
return n.nodeValue || n.textContent || n.innerText || n.text;
}
?>




