Ajax problem/bug?

Giovanni

Mitglied
Hallo Leute,

leider weiß ich nicht wie ich das genau nennen kann, somit ist der Titel nicht wirklich top passend.
Doch ich hab das gefühl es ist wie ein Bug in meinen Augen =/

Nun ja nun zu mir kurz, ich hab sehr geringe grundkenntnisse in JavaScript, ich weiß wie man Variablen und Functionen wie auch diverse schleifen Baut, doch mehr auch nicht halt das Grundgerüst wie bei allen Programmiersprachen, weiter kenntnisse und durchaus viel viel besser kenntnisse in php, mysql, css und html.

Ich hab mich mit AJAX versucht, weil mein Chef wollte das ich mich darein arbeite, nun gut.
Ich hab au was zustande bekommen und verstehe so im gröbsten den Aufbau und die Funktionen meiner Scripte, doch ich versteh den einen Fehler nicht.
Und zwar hab ich 2 Request abfragen, beide Funktionieren, doch die zeite Abfrage leider mit einem komischen Problem und zwar es funktioniert nur wenn ich ein alert("); hineinsetze... wie ihr dann sehen könnt in den Code Zeilen hab es auch noch Kommentiert diese Stelle.

Ich hoffe Ihr könnt mir helfen und ggf. auch erklären warum dies so ist? Und warum es nicht auch Ohne Alert-Befehl funktioniert.


Der HTML-Code:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
        <title>Ajax Test's</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<link rel="stylesheet" type="text/css" href="" />
	<script type="text/javascript" src="request_test.js"></script>
</head>

<body>
	<h4>Test 01</h4>
	<form name="myForm">
		Name: <input onkeyup="test1();" type="text" name="username" />
		Time: <input type="text" name="time" />
	</form>
	
	<br />
	<br />
	
	<h4>Test 02</h4>
	<form>
		First Name: <input type="text" id="txt1" onkeyup="test2(value);"
	</form>
	<p>Suggestions: <div id="versteck"></div></p>
	
</body>

</html>

Nun der JavaScript/AJAX Code:
Code:
var request = false;

// Browser Check
function browser_check() {
	if(window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Moziall, Safari, Opera
	} else if(window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}
}



/****** 
*
*  Das ist der Test 01 Block 
*
******/

// Request senden
function test1() {
	browser_check();
	// ueberpruefen, ob Request erzeugt wurde
	if(!request) {
		alert('Es wurde keine XMLHTTP-Instanz erstellt\nIhr Browser unterstuetz kein AJAX');
		return false;
	} else {
		var url = "test.php"; // Verlinkte Adresse
		// Request oeffnen
		request.open('post', url, true);
		// Request senden
		request.send(null);
		// Request auswerten
		request.onreadystatechange = interpretTest01;
	}
}

// Request auswerten
function interpretTest01() {
	switch(request.readyState) {
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if(request.status != 200) {
				alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
			} else {
				document.myForm.time.value = request.responseText;
			}
			break;
			
		default:
			break;
	}
}

/****** 
*
*  Test 01 Block - ENDE 
*
******/





/****** 
*
*  Das ist der Test 02 Block 
*
******/

// Request senden
function test2(str) {
	browser_check();
	// ueberpruefen ob Request erzeugt wurde
	if(!request) {
		alert('Es wurde keine XMLHTTP-Instanz erstellt\nIhr Browser unterstuetz kein AJAX');
		return false;
	} else {
	
		if( str.length == 0) {
			document.getElementById('versteck').innerHTML = "";
			return;
		} 
	
		var url = "test2.php";
	
		url = url+'?q='+str;
		//url = url+'&sid='+Math.random();
		
		// Request oeffnen
		request.open("get", url, true);
		// Request senden
		request.send(null);
		// Request auswerten
		request.onreadystatechange = stateTest2();
	}
}


function stateTest2() {
alert(request.readyState); // <------- Hier ist das mit dem ALERT FEHLER / BUG?!
	switch(request.readyState) {
		
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if(request.status != 200) {
				alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
			} else {
			alert(request.responseText);
				document.getElementById('versteck').innerHTML = request.responseText;
			}
			break;
			
		default:
		alert("haha");
			break;
	}
}
/****** 
*
*  Test 02 Block - ENDE
*
******/


zu guter letzt der PHP-Code von test.php:
PHP:
<?php

$date = date("H:i:s");

echo $date;

?>

der PHP-Code von test2.php:
PHP:
<?php

header("Cache-Control: no-cahce, must-revalidate");

$names = array();
$names[] = "Anna"; 
$names[] = "Amanda"; 
$names[] = "Anastacia"; 
$names[] = "Ali"; 
$names[] = "Antonio";
$names[] = "Bernd"; 
$names[] = "Beatris"; 
$names[] = "Boris"; 
$names[] = "Becky"; 
$names[] = "Basti";
$names[] = "Cindy"; 
$names[] = "Christo"; 
$names[] = "Christina"; 
$names[] = "Chris"; 
$names[] = "Christopher";
$names[] = "Donald"; 
$names[] = "Dennise"; 
$names[] = "Dami"; 
$names[] = "Diana"; 
$names[] = "Daisy";
$names[] = "Eve"; 
$names[] = "Erik"; 
$names[] = "Ema"; 
$names[] = "Erika"; 
$names[] = "Ester";
$names[] = "Florian"; 
$names[] = "Frank"; 
$names[] = "Frida"; 
$names[] = "Fritz"; 
$names[] = "Fiona";
$names[] = "Giovanni"; 
$names[] = "Gina"; 
$names[] = "Georgia"; 
$names[] = "Gino"; 
$names[] = "Gustav";
$names[] = "Hans"; 
$names[] = "Holly"; 
$names[] = "Herbert"; 
$names[] = "Helge"; 
$names[] = "Helmut";
$names[] = "Igor"; 
$names[] = "Ingrid"; 
$names[] = "Ivan"; 
$names[] = "Isabella"; 
$names[] = "Inga";
$names[] = "Johann"; 
$names[] = "John"; 
$names[] = "Johanna"; 
$names[] = "Jens"; 
$names[] = "Julia";
$names[] = "Kai"; 
$names[] = "Klaus"; 
$names[] = "Katrin"; 
$names[] = "Katarina"; 
$names[] = "Klaudia";
$names[] = "Ludwig"; 
$names[] = "Luigina"; 
$names[] = "Laura"; 
$names[] = "Lariasa"; 
$names[] = "Leo";
$names[] = "Mario"; 
$names[] = "Maria"; 
$names[] = "Mauritzio"; 
$names[] = "Meriem"; 
$names[] = "Mustafa";
$names[] = "Olaf"; 
$names[] = "Oliver"; 
$names[] = "Olivia"; 
$names[] = "Omario"; 
$names[] = "Ophelia";
$names[] = "Pina"; 
$names[] = "Patrick"; 
$names[] = "Petra"; 
$names[] = "Paula"; 
$names[] = "Peter";
$names[] = "Rita"; 
$names[] = "Roberto"; 
$names[] = "Rebecka"; 
$names[] = "Roland"; 
$names[] = "Ronaldo";
$names[] = "Sandra"; 
$names[] = "Samuele"; 
$names[] = "Simon"; 
$names[] = "Susi"; 
$names[] = "Siri"; 
$names[] = "Tina"; 
$names[] = "Tatiana"; 
$names[] = "Tomislav"; 
$names[] = "Timon"; 
$names[] = "Tanja";
$names[] = "Uwe"; 
$names[] = "Ulrike"; 
$names[] = "Uli"; 
$names[] = "Viviene"; 
$names[] = "Viktoria"; 
$names[] = "Verena"; 
$names[] = "Veronika"; 
$names[] = "Wolfgang";
$names[] = "Walter"; 
$names[] = "Yvonne";

// q Parameter von URL entnommen
$q = $_GET["q"];
if(strlen($q) > 0) {
	$hint = "";
	for($i = 0; $i < count($names); $i++) {
		$pos = strpos($names[$i], ucfirst(strtolower($q)));
		if($pos !== false){
			if($hint == "") {
				$hint = $names[$i];
			} else {
				$hint .= ", ".$names[$i];
			}
		}
	}
}

// Suggestion Ausgabe definieren wenn nichts gefunden wird
if ($hint == "") {
	$ausgabe = "no suggestion";
} else {
	$ausgabe = $hint;
}
// Ausgabe der Ausgabe xD
echo $ausgabe;

?>


Ich hoffe ihr könnt mir helfen und erklären wieso und weshalb ich werd sonst noch wahnsinnig^^
Danke grüße
giovanni
 
Moin,

Code:
request.onreadystatechange = stateTest2();

Dies ist keine Eventüberwachung, stateTest2() wird sofort aufgerufen.

Warum funktioniert es mit dem alert()?
AJAX läuft asynchron...bis du den alert() weggeklickt hast, wurde der Request im Hintergrund verarbeitet, und der readystate ist 4.

Notiere es so
Code:
request.onreadystatechange = stateTest2;
(ohne die Klammern)...und es sollte wie gewünscht funktionieren...weil es jetzt eine Eventüberwachung ist.
 
es funktioniert juhuuu =)
Danke, doch irgendwie bitter so ein kleiner Fehler.
Nun jetzt bin ich ne bereicherung schlauer und dieser Fehler wird der letzte sein den ich übersehen werde xD

Nochmals Danke
 

Neue Beiträge

Zurück