xmlhttp.responseText printen werkt niet in IE

Status
Niet open voor verdere reacties.

bartjel

Gebruiker
Lid geworden
22 mrt 2011
Berichten
8
Waarschijnlijk is het voor één van jullie heel makkelijk te repareren... sinds ik mijn site een beetje heb veranderd werkt één ding niet in IE:
HTML:
<script type="text/javascript">
document.getElementById("kijk").innerHTML=xmlhttp.responseText;
</script>
Daar komt het eigenlijk op neer. Het verzendt de hashtag naar de server, krijgt het antwoord, maar het printen lukt niet. Het gaat om deze website. In Chrome werkt het wel goed, maar in IE niet.

Wie helpt mij?
 
Laatst bewerkt:
Eh, ja, wel handig als je ook even wat meer code geeft. Wat is xmlhttp voor object? Etcetera.


[edit]html ook graag, ID fout? DOM al geladen? ...[/edit]


[edit]edit: oh noes, had de link niet gezien, my bad[/edit]
 
Laatst bewerkt:
Okay, ik krijg dit in IE:
Bericht: Onbekende runtime-fout
Regel: 57
Teken: 4
Code: 0
URI: http://www.wieisdemolgemist.nl/
heerlijk toch, zo'n foutenconsole? In ieder geval, regeltje 57 is inderdaad wat je gepost had.

Ik denk dat het komt omdat je een anonieme functie gebruikt en toch verwacht dat het object erin nog bestaat. probeer zoiets:[js] xmlhttp.onreadystatechange=function(xmlhttp) {
return function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("kijk").innerHTML=xmlhttp.responseText;
}
else{
original = document.getElementById("kijk").innerHTML;
text = 'Stap: '+xmlhttp.readyState+'/4, status: '+xmlhttp.status+'<br>';
document.getElementById("kijk").innerHTML=original+text;
}
}
}(xmlhttp);[/js]
 
Ik zal de html in het kort samenvatten:

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
vorigehash = 'Nog geen window.location.hash of nog niet gestart.';
function ST(){
	setTimeout( "ST()", 1000 );
	if(window.location.hash){
		if(window.location.hash != vorigehash){
			O(window.location.hash.substring(1));
			vorigehash = window.location.hash;
		}
	}
	
}
ST();

function O(aflevering){
	if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();
	else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState==4){
			document.getElementById("kijk").innerHTML=xmlhttp.responseText;
		}
	}
	xmlhttp.open("GET","kijken.php?a="+aflevering,true);
	xmlhttp.send();
	_gaq.push(['_trackPageview'], '#'+aflevering);
	document.title = 'Kijken: Wie is de Mol? '+aflevering+' op wieisdemolgemist.nl';
}

function T(table){
	if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();
	else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState==4 && xmlhttp.status==200){
			document.getElementById("table").innerHTML=xmlhttp.responseText;
		}
		else{
			original = document.getElementById("table").innerHTML;
			text = 'Stap: '+xmlhttp.readyState+'/4, status: '+xmlhttp.status+'<br>';
			document.getElementById("table").innerHTML=original+text;
		}
	}
	xmlhttp.open("GET","table.php?t="+table,true);
	xmlhttp.send();
	document.getElementById("table").innerHTML='<br>Bezig met laden, een moment geduld aub.<br><br>';
	_gaq.push(['_trackPageview'], '#T'+table);
}
</script>
</head>
<body>
<p id="table">
<!-- hier staat dan een tabel waar je een aflevering kunt kiezen, met als voorbeeld:
<td><a href='#0301'>1</a></td> -->
<p id="kijk">
Selecteer eerst een aflevering</div>
</body>
</html>

Als op de link wordt geklikt wordt dit opgepakt door de tijdcontrole, wordt een request gedaan, wordt ontvangen en daarna zou het in <p id="kijk"></p> gezet moeten worden, maar dat gebeurt niet. Als je doet alert(xmlhttp.responseText); lukt het wel, je ziet dan het antwoord in een alert. Als je doet document.getElementById("kijk").innerHTML=xmlhttp.responseText; werkt het opeens niet, als hierboven...
 
Laatst bewerkt:
Hmm, dat het in een alert wel werkt is raar, want dan is het misschien toch een DOM probleem. Kan je eens zoiets doen:[JS] //alert(xmlhttp.responseText);
alert(document.getElementById("kijk").innerHTML);[/JS]eens zien of het kijk-innerHTML geval wel werkt (en zo niet, zonder .innerHTML - het hoort iets van DOMparagraphElement te geven)
 
Laatst bewerkt:
Okay, ik krijg dit in IE:heerlijk toch, zo'n foutenconsole? In ieder geval, regeltje 57 is inderdaad wat je gepost had.

Ik denk dat het komt omdat je een anonieme functie gebruikt en toch verwacht dat het object erin nog bestaat. probeer zoiets:[js] xmlhttp.onreadystatechange=function(xmlhttp) {
return function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("kijk").innerHTML=xmlhttp.responseText;
}
else{
original = document.getElementById("kijk").innerHTML;
text = 'Stap: '+xmlhttp.readyState+'/4, status: '+xmlhttp.status+'<br>';
document.getElementById("kijk").innerHTML=original+text;
}
}
}(xmlhttp);[/js]

Ik heb het geprobeert maar het werkt niet. Het is ook zo raar omdat een request om de tabel te veranderen wel werkt, en eigenlijk bijna hetzelfde is.

Waar haal jij trouwens die foutenconsole vandaan?
 
In IE staat er links onder zo'n geel schild-icoontje als er iets mis is. 2x op klikken.

Chrome, FF en de meeste andere browsers hebben ook een console, de shortcut is ctrl+shift+J



:thumb:



[edit]probeer eens post # 5[/edit]
 
Laatst bewerkt:
Hmm, dat het in een alert wel werkt is raar, want dan is het misschien toch een DOM probleem. Kan je eens zoiets doen:[JS] //alert(xmlhttp.responseText);
alert(document.getElementById("kijk").innerHTML);[/JS]eens zien of het kijk-innerHTML geval wel werkt (en zo niet, zonder .innerHTML - het hoort iets van DOMparagraphElement te geven)

Ik heb het aangepast, je kunt zien dat hij de oude en de nieuwe kan ophalen, maar verwerken doet 'ie niet...
 
Okay, nu, maak er nou eens dit van?
[js]alert('d.geby: ' + document.getElementById("kijk") +
'\ntypeof: ' + (typeof document.getElementById("kijk")) +
'\ntypeof innerHTML: ' + (typeof document.getElementById("kijk").innerHTML));[/js]
 
Okay, nu, maak er nou eens dit van?
[js]alert('d.geby: ' + document.getElementById("kijk") +
'\ntypeof: ' + (typeof document.getElementById("kijk")) +
'\ntypeof innerHTML: ' + (typeof document.getElementById("kijk").innerHTML));[/js]

Gedaan:
d.geby: [object HTMLParagraphElement]
typeof: object
typeof innerHTML: string
 
Huh. Dat is apart. Het klopt allemaal, en dus zou het moeten werken =/


Okay, hier is nog wat dingen die je kan testen:[JS]document.getElementById('kijk').innerHTML = 'test!'; // test op foutieve HTML[/JS][JS]document.getElementById('ietsanders').innerHTML = 'moar test!'; // test of fout in paragraaf#kijk
// maak eerst een nieuwe paragraaf aan NET na de <body>[/JS]
 
Huh. Dat is apart. Het klopt allemaal, en dus zou het moeten werken =/


Okay, hier is nog wat dingen die je kan testen:[JS]document.getElementById('kijk').innerHTML = 'test!'; // test op foutieve HTML[/JS][JS]document.getElementById('ietsanders').innerHTML = 'moar test!'; // test of fout in paragraaf#kijk
// maak eerst een nieuwe paragraaf aan NET na de <body>[/JS]

Foutieve HTML dus... wat is er foutief aan?
 
Ik zie het al... er zat een iframe in (de tweet en like knopjes). Ik ga het proberen te fiksen, maar het werkt iig weer. Bedankt voor het helpen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan