ugrás a tartalomhoz

a kód nem megy FF-ban: Building responsive web applications könyv

killroy · 2008. Ápr. 4. (P), 09.01
Sziasztok!

Megvásároltam a téma címében említett könyvet. a szerző által írt kódokat írom be a szerkesztő programomba.
Na már most azt a helyzet, hogy semmi hibát nem ír ki egyik böngésző sem, és IE-ben tökéletesen lefutnak a kódok.
Tehát valószínüleg lefut a program szerintem, csak a FF-nak van valami problémája az innerHTML tulajdonsággal és nem jeleníti meg a responseText-et, vagy responseXML-t (tökmindegy).

Van valami amit tudni kellene erről az innerHTML-ről??
Valaki akinek még meg van ez a könyv nem találkozott ezzel a problémával??
 
1

khm

zila · 2008. Ápr. 4. (P), 09.39
Miért kell mindig egy nyomorult kódrészletért könyörögni? Nem értem. Ha adnál részletet, az is tudna segíteni, akinek nincs meg ez a könyv. De ha meg is lenne, szerinted ki fog nekilátni keresgélni a könyvben egy kódot ennyi info alapján? Ha adtál volna oldalszámot legalább, de még csak az se.
2

ez tetszik

killroy · 2008. Ápr. 4. (P), 10.23
A tapasztalt programozó panaszkodik mert a kérdezőnek nem tud segíteni a rosszul feltett kérdés miatt.
Ez tetszik! :)

Ez a kód egy az egyben a könyvből származik. Lényege, hogy attól függően, hogy milyen nevet írunk be érkezik egy válasz a szervertől.

a teljes HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>

<script type="text/javascript">

var xmlhttp = createXmlHttpRequestObject();

	function createXmlHttpRequestObject() 
	{
		var xmlhttp;
		
		if (window.ActiveXObject) 
		{
			try 
			{
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch (e) 
			{
			alert('Hiba: ' + e.toString());
			xmlhttp = false;
			}				
		} 
		else 
		{
			try 
			{
			xmlhttp = new XMLHttpRequest();
			} catch (e) 
			{
			alert('Hiba: ' + e.toString());
			xmlhttp = false;
			}
		}
		if (!xmlhttp) 
		{
		alert('Nem sikerült létrehozni az XMLHttpRequest objektumot!');
		}
		else
		{
		return xmlhttp;
		}
	}


	function process() 
	{
		//ha az xml objektum nem dolgozik:
		if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0){
		var name = encodeURIComponent(document.getElementById('myName').value);
		xmlhttp.open('GET', 'quickstart.php?name=' + name, false);
		xmlhttp.onreadystatechange = handleServerResponse;
		xmlhttp.send(null);
		} 
		else
		{
		setTimeout('process()', 1000);
		}
	}
	
	function handleServerResponse() 
	{
		if (xmlhttp.readyState == 4) 
		{
			if (xmlhttp.status == 200)
			{
			xmlResponse = xmlhttp.responseXML;
			xmlDocumentElement = xmlResponse.documentElement;
			helloMessage = xmlDocumentElement.firstChild.data;
			document.getElementById('divMessage').innerHTML = '<i>' + helloMessage + '</i>';
			setTimeout('process()', 1000);
			} 
			else 
			{
			alert('Hiba lépett fel:' + "\r\n" + xmlhttp.statusText);
			}
		}
	}
</script>

</head>
<body onload="process()">

<input type="text" id="myName" />

<div id="divMessage" />

</body>
</html>
és a PHP:

<?

header("Content-Type: text/xml");

echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';

echo '<response>';

$name = $_GET['name'];

$userNames = array('MARTIN', 'ZSOLT', 'ZOLI', 'DÁVID', 'TOMI');

	if (in_array(strtoupper($name), $userNames)) 
	{
	echo 'Hello ' . htmlentities($name) . '!';
	}
	else if (trim($name) == "")
	{
	echo 'Stranger! Tell me your name!';
	}
	else 
	{
	echo 'I don\'t know who you are!';
	}

echo '</response>';

?>
3

Nekem működik

zila · 2008. Ápr. 4. (P), 11.01
A tapasztalt programozó panaszkodik mert a kérdezőnek nem tud segíteni a rosszul feltett kérdés miatt.
Ez tetszik! :)

Ha tudnád mennyire fárasztó folyton könyörögni, nem tetszene annyira ;)

Nos, el kell keserítselek, a fenti kód tökéletesen működik FF-ban (2.0.0.13):

4

Érdekes

killroy · 2008. Ápr. 4. (P), 11.27
Érdekes! Egyébként tegnap az volt, hogy teszteltem a programot mindkét böngésző alatt és eleinte csak IE alatt működött és egy FF alatt nem történt semmi. Aztán egyszer csak megint lefutattam FF alatt anélkül hogy bármihez hozzányúltam volna és működött FF alatt is. Ma megnéztem és már megint nem csinált semmit a FF. :) IE-ben úgyanúgy jól működött.
Miért van az hogy a kód amit bemásoltam nálam nem mindig működik FF-ban?

Amúgy nem gúnyolódni akartam, csak tetszik, hogy ennyire komolyan veszitek a segítség nyújtást.
5

Debug

zila · 2008. Ápr. 4. (P), 12.33
Nos, ha ez a helyzet, akkor neki kell látni a hibakeresésnek. Én első körben kiszedném ezt az egész timer-es őrületet belőle és gombnyomásra indítanám az xhr-t. FF alatt a firebug plugin-nel sok dolgot meg tudsz nézni, és ami fontosabb: debugolhatod a javascriptet. Menj rajta végig szépen soronként, nézegesd melyik lépés után mi történik, mi változik a DOM-ban, változókba mi kerül stb.

Tudom, hogy nem gúnyolódni akartál, de nem hagyhattam szó nélkül :)
6

Soronként?

Velias9 · 2008. Ápr. 4. (P), 14.32
Hogyan lehet a FireBug-gal soronként végigmenni egy javascript programon?
A consol-t már ismerem, de remélem nem arra gondolsz, hogy soronként kell bemásolni a programot és végrehajtani!
7

Nem

zila · 2008. Ápr. 4. (P), 14.45
nem, nem arra gondoltam, hogy soronként másolod be :)
Megnyitod az oldalt amit debugolni szeretnél, kinyitod a firebugot, Script fülre kattitasz, megkeresed azt a sor a scriptben ahonnan a debug-ot indítani akarod és sorszám elé kattintasz, ezzel elhelyezel egy töréspontot (Breakpoint) a kódban. Majd reload. Ha a törésponthoz ér a végrehajtás, akkor meg fog állni és onnan kezdve soronként lépkedhetsz végig a kódon. Az ehhez szükséges kontrollok ott vannak a firebug jobb felső szekciójában (continue, step over, step into, step out) Annyi töréspontot tehetsz a scriptekbe amennyit akarsz. A watch fülön figyelendő változókat, kifejezéseket definiálhatsz, és persze itt nézheted meg a pillanatnyi contextben elérhető változók, objektumok értékeit is.