Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Ajax Antworten
Ajax

Netbuster
Fachidiot


Beiträge: 128


Hallo irgendwie klappt die Funktion in Zeile 1 nicht, wisst ihr warum?


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: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
89: 
90: 
91: 
92: 
93: 
94: 
95: 
96:
<?php
        header("Location: http://netkoma.spacig.de/index.php");
	exit;
	require("sajax.php");
	
	
	function colorify_ip($ip)
	{
		$parts = explode(".", $ip);
		$color = sprintf("%02s", dechex($parts[1])) .
				 sprintf("%02s", dechex($parts[2])) .
				 sprintf("%02s", dechex($parts[3]));
		return $color;
	}
	
	function add_line($msg) {
		$f = fopen("/tmp/wall.html", "a");
		$dt = date("Y-m-d h:i:s");
		$msg = strip_tags(stripslashes($msg));
		$remote = $_SERVER["REMOTE_ADDR"];
		$color = colorify_ip($remote);
		fwrite($f, "<span style=\"color:#$color\">$dt</span> $msg<br>\n");
		fclose($f);
	}
	
	function refresh() {
		$lines = file("/tmp/wall.html");
		return join("\n", array_slice($lines, -25));
	}
	
	$sajax_request_type = "GET";
	sajax_init();
	sajax_export("add_line", "refresh");
	sajax_handle_client_request();
	
?>
<html>
<head>
	<title>Wall</title>
	<style>
	.date { 
		color: blue;
	}
	</style>
	<script>
	<?
	sajax_show_javascript();
	?>
	
	var check_n = 0;
	
	function refresh_cb(new_data) {
		document.getElementById("wall").innerHTML = new_data;
		document.getElementById("status").innerHTML = "Checked #" + check_n++;
		setTimeout("refresh()", 1000);
	}
	
	function refresh() {
		document.getElementById("status").innerHTML = "Checking..";
		x_refresh(refresh_cb);
	}
	
	function add_cb() {
	}

	function add() {
		var line;
		var handle;
		handle = document.getElementById("handle").value;
		line = document.getElementById("line").value;
		if (line == "") 
			return;
		x_add_line("[" + handle + "] " + line, add_cb);
		document.getElementById("line").value = "";
	}
	</script>
	
</head>
<body onload="refresh();">

<form name="f" action="#" onsubmit="add();return false;">
	Gibt hier deine Chatnachricht ein.<br/>
	
	<input type="text" name="handle" id="handle" value="(name)"
		onfocus="this.select()" style="width:130px;">
	<input type="text" name="line" id="line" value="(enter your message here)"
		onfocus="this.select()"
		style="width:300px;">
	<input type="button" name="check" value="Post message"
		onclick="add(); return false;">
	<div id="wall"></div>
	<div id="status"><em>Loading..</em></div>
</form>
	
</body>
</html>



  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Also in deinem POST ist es nicht Zeile 1 sondern 4 - durch die Whitespaces davor, würden also Leerzeichen ausgegeben werden, die Weiterleitung ist ein HTTP-Header und kann nicht mehr nach der Ausgabe von Inhalt erfolgen.

Falls diese Leerzeilen nur ein Postingfehler sind, kann es zusätzlich in Problem mit dem Location-header() sein. Manche Provider benötigen zwingend ein header('Status: 301 Moved') bzw header('Status: 302 Temporary Moved'). Sonst kommt eine Zwischenseite.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Netbuster
Fachidiot


Beiträge: 128


welche Leerzeichen meinst du?
Und es erscheint eine Meldung:

Umleitungs-Limit für diese URL überschritten. Die angeforderte Seite konnte nicht geladen werden. Das kann von geblockten Cookies herrühren.

  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Die Fehlermeldung sagt aus, dass du immer weiterleitest - es ergibt sich eine Endlosschleife.

Dein Script wird ehh nur immer bis zu dem exit() ausgeführt - alles danach wird ignoriert. Da dieses exit() nicht bedingt ist (kein if) passiert dies bei jedem Aufruf der Seite. Wenn die Seite sich selbst aufruft, ergibt dies eine Endlosschleife, ohne das der Browser jemals dazu kommt eine Seite darzustellen.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Netbuster
Fachidiot


Beiträge: 128


aber wie haben die es denn gemacht:
schau mal hier:
http://www.modernmethod.com/sajax/sajax-0.11/php/example_wall.php
hier das Beispiel wie es werden soll und hier:
http://www.modernmethod.com/sajax/sajax-0.10/php/example_wall.php.txt
der Quelltext, und hier:
http://absinth.modernmethod.com/sajax/
die Homepage von diesem Script

  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Ich weiß nicht wie sie es wirklich machen - ich sehe nur was durch den Quellcode passiert. Am besten nimmst du die beiden Zeilen einfach mal raus.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Netbuster
Fachidiot


Beiträge: 128


es klappt dann zwar, aber mann sieht einen unterschied, versuchs mal bei dir!
Mit dem Sourcecode den sie da zeigen sollte man das Refreshen nicht merken, aber ohne den beiden Zeilen merkt man die ganze Zeit den Text refreshen.

  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Bei mir funktioniert auch das Beispiel auf deren Webseite nicht. (Seite wird dargestellt, weiter passiert nix)

Ich verwende für diese Zwecke eher individuelle JS-Callbacks in iframes oder direkt XMLHTTPRequest. Den aktuellen Hype um "Ajax" kann ich nicht nachvollziehen.

Im Normalfall sollte es bei all diesen Konzepten _gar_ keinen Reload der Hauptseite mehr geben. Statt dessen werden im Hintergrund neue Informationen geladen und dann über JS/DOM die Seite im Browser geändert.

Der Location-Header veranlaßt den Browser direkt die nächste Seite aufzurufen, ohne die aktuelle Seite darzustellen. Die Funktion exit() beendet das Script komplett. Damit wäre natürlich im Browser kein Reload sichtbar. Aber weder im PHP noch im Browser würden Anweisungen nach diesen Befehlen abgearbeitet werden.


---
Weaverslave

Diese Nachricht wurde geändert von: subjective
  Profil   Website   Editieren   Zitieren

Netbuster
Fachidiot


Beiträge: 128


ja, aber wie sollte ich es denn sonst machen?
und wie würdest du es machen, ohne zu refreshen?

Diese Nachricht wurde geändert von: Netbuster
  Profil   Editieren   Zitieren

Netbuster
Fachidiot


Beiträge: 128


hat schon geklappt danke subjective

  Profil   Editieren   Zitieren
 

Antworten
Nach oben