Autor Zpráva
RiZe
Profil
Zkoušel jsem dát dohromady nějaký jednodušší AJAX refresh, jelikož chci ne moc viditelně a bez cvakání (IE) obnovovat stránku chatu, sesmolil jsem tedy tento kód.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Pragma" content="no-cache">

<title>title</title>

<style type="text/css" media="all">@import "./themes/default/windows.css";</style>

<script language="javascript">
var http = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));

function refresh(url)
{
http.open("GET", './ajax.php#end', true);
http.onreadystatechange = useHttpResponse;
http.send(null);
}

function useHttpResponse()
{
if (http.readyState == 4 && (http.status == 200 || http.status == 0))
{
document.getElementByTagName('body').innerHTML = http.responseText;
output = http.responseText;
}
}
</script>

</head>

<body onload="return setInterval('refresh()', 2000);">

<script language="javascript">
document.write.output;
</script>
</body>
</html>


Soubor ajax.php načte textový soubor a vypíše jeho obsah do výstupu. Soubor je v kódování windows-1250. Zkoušel jsem alertem vypisovat alespoň status a state, ale nic nevypisovalo, možná ani nefunguje to cyklení, i když jednou už to zacyklené bylo ale zas to nic nevypisovalo. Dělal jsem to částečně odsud a stejně to neběhá, ví někdo kde může být chyba? Tato aplikace poběží jen v IE.
peta
Profil
RiZe
Odkaz na tvuj soubor?
Co ti na tom nebeha?
Co vypisuje JS konzola?
Co vypisuje chybove hlaseni PHP error_reporting ?
Jaky PHP soubor ti vygeneruje chat?

Treba mas chybu ve zdrojovem kodu toho TXT/XML.
Treba mas chybu v JS kodu, coz se nejlepe zjistuje JS konzolou, kterou ma kazdy kvalitni www prohlizec pracujici s JS.
Take muzes mezi jednotlive casti JS dat Alert a sledovat, ktery alert se ti zobrazi a ktery uz ne.
Take muzes vychazet z toho, ze na te strance to funguje, tak podle ni to zkopirovat ze sourcecode.

Muzes zkusit:
http://www.volny.cz/peter.mlich/www.htm#mssub16
ajax
http://www.volny.cz/peter.mlich/www.htm#msub13
ajax chat
Chamurappi
Profil
Reaguji na RiZe:
document.getElementByTagName('body')
Tahle metoda neexistuje. Funguje jen document.getElementsByTagName a vrací pole, tudíž asi chceš:
document.getElementsByTagName('body')[0].innerHTML = http.responseText;
RiZe
Profil
Nakonec jsem to upravil, jelikož to běhá pod IE tak použil pár jeho kravinek a rozběhal to. Kód chatu a zároveň AJAX obsluhy vypadá takto:

chat.php


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Pragma" content="no-cache">

<title>RZ Software</title>

<style type="text/css" media="all">@import "./themes/default/windows.css";</style>

<script language="javascript">
var http = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));

function refresh(url)
{
http.open("POST", './ajax.php', true);
http.onreadystatechange = useHttpResponse;
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.send(null);
}

function useHttpResponse()
{
if (http.readyState == 4 && http.status == 200)
{
document.body.innerHTML = http.responseText;
}
}
</script>

</head>

<body onload="return setInterval('refresh()', 2000);">



</body>
</html>


ajax.php


<?php
require "./functions.php";

/**
* Vypsání obsahu chatu
*/
echo acin_output(acin_readfile('acin_shouts.txt'));

?>

<a name="end"></a>


Zůstává nyní poslední problém. Chtěl bych, aby byl chat vždy posunut (i po refreshi dolů), k čemuž je tam name="end". Stránka chatu je vložena do jiné stránky iframem který má parametr src="chat.php#end". Nyní to ale nefunguje.
peta
Profil
RiZe
jakpsatweb - css - position
S tim name je to sice pekne, ale opet schazi zakladni scripty. Odkaz na stranku by to vyresil.
toto: chat.php#end
to funguje bez problemu, problem je pak v tom ostatnim.

Pokud mas toto v souboru ajax.php
<?php
require "./functions.php";
/**
* Vypsání obsahu chatu
*/
echo acin_output(acin_readfile('acin_shouts.txt'));
?>
<a name="end"></a>
... pak ti tam nejak schazi ta cast chat.php. Cili neni v cem hledat chybu.

Jinak, JS konzolou bys dospel k zaveru, viz Chamurappi, zes mel spatne pojmenovanou funkci document.getElementsByTagName('BODY').
Tez JS konzolou zjistis, ze document.body.innerHTML neni tak spolehlive pri ruznych doctype a ruznych prohlizecich. Zkusil bych zkombinovat obe metody.
body = document.body ? document.body : document.getElementsByTagName('BODY') ? document.getElementsByTagName('BODY') : null;
RiZe
Profil
Toto jsou jediné dva scripty, funkce acin_output odstraní slashování, acin_readfile vrací obsah souboru. Pak už je jen hlavní stránka která obsahuje <iframe src="chat.php#end" width="199" height="300" ... Soubory mám na localhostu a nyní ani nejsem na svém PC.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0