Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Probleme mit Ajaxchat und Firefox (Ajax,Java,Php)

Frage Entwicklung JavaScript

Mitglied: FeuerTeufel

FeuerTeufel (Level 1) - Jetzt verbinden

14.12.2009 um 02:54 Uhr, 6891 Aufrufe, 5 Kommentare

Hallo, ich bin seit ein paar Tagen an einem Ajaxchat dran und mit dem Firefox klappt es nicht.

Hier ist der Chat im Original-Quellcode zu finden wie ich ihn durch Google gefunden habe:
http://www.ml-bkf.de/chat/ajaxchat.htm


Das Problem ist folgendes: Ich kann mit dem InternetExplorer ganz normal Messages speichern (nur bei Sonderzeichen macht es noch Probleme) - da funktioniert es ohne Probleme.

Aber mit dem Firefox geht es nicht. Er öffnet die Messages zwar, aber er speichert nur selten etwas in die Datenbank (siehe Chatverlauf). Es dauert also manchmal 40-50 Minuten, bis ich mit dem Firefox wieder eine Messages im Chat senden kann (und diese auch gespeichert wird) - vorher ignoriert er das Senden einfach. Das könnt ihr ja gerne mal ausprobieren.

Man kann also nicht unmittelbar nach dem Senden einer Message erneut eine Message absenden, man muss ne längere Zeit warten. Mal geht es nach 10 Minuten wieder, dann dauerts auch mal ne ganze Stunde.

Es handelt sich um einen Ajaxchat mit einer ajaxchat.htm mit dem Formular und dem Javascript und eine ajaxchatx.php mit dem ausführenden Php-Code zum speichern in die Datenbank.

Durch ausrufen der Php-Datei kann man direkt einen Eintrag in die Datenbank erzeugen, das funktioniert auch Problemlos:
http://www.ml-bkf.de/system/ajaxchatx.php?action=createNewEntry&nam ...

Folgende URL ruft die Einträge aus der Datenbank ab:
http://www.ml-bkf.de/system/ajaxchatx.php?latestID=1&action=getLate ...

Hier ist noch der Code:
ajaxchat.htm

01.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
02.
<html> 
03.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
04.
<head> 
05.
<title>AJAX Chat</title> 
06.
<style type="text/css"> 
07.
.entry { 
08.
width: 100%; 
09.
background-color: #F5F5F5; 
10.
border: 1 dotted #666666; 
11.
font-family: Verdana; 
12.
13.
 
14.
.entry#small { 
15.
color: #CCCCCC; 
16.
17.
 
18.
</style> 
19.
<script type="text/javascript"> 
20.
var latestID = 0; //latestID als globale Variable 
21.
 
22.
//Funktion, mit der Anfragen nach neuesten Einträgen gesendet wird 
23.
function getLatestEntries() { 
24.
	if (httpGetLatestEntries.readyState == 4 || httpGetLatestEntries.readyState == 0) { //Anfrage senden, wenn Status der letzten Anfrage "completed" ist, bzw. "nicht initialisiert" (d.h. erster Aufruf) 
25.
  	httpGetLatestEntries.open("GET","http://www.ml-bkf.de/chat/ajaxchatx.php?action=getLatestEntries&latestID="+latestID, true); 
26.
    httpGetLatestEntries.onreadystatechange = handleHttpGetLatestEntries;  
27.
  	httpGetLatestEntries.send(null); 
28.
29.
30.
 
31.
//Behandelt die Serverantwort 
32.
function handleHttpGetLatestEntries() { 
33.
 
34.
  if (httpGetLatestEntries.readyState == 4) { 
35.
 
36.
    response  = httpGetLatestEntries.responseXML.documentElement;  
37.
	messages = response.getElementsByTagName('message'); 
38.
     
39.
	if(messages.length > 0) { //Anzeige nur, wenn mindestens eine neue Nachricht 
40.
		//document.write(messages.length); //Debug 
41.
		for (var i=messages.length-1; i>=0; i--) { 
42.
  			//Darstellung im Browser mit dem DOM 
43.
 		  	showEntry= document.getElementById("showEntries"); 
44.
			neuSpan = document.createElement('span'); 
45.
			neuSpan.setAttribute('class','entry'); 
46.
			neuSpan.setAttribute('className','entry'); //für den InternetExplorer 
47.
			neuSmall = document.createElement('small'); 
48.
			neuNameDate = document.createTextNode(messages[i].getElementsByTagName('date')[0].firstChild.nodeValue + ': ' + messages[i].getElementsByTagName('name')[0].firstChild.nodeValue +': '); 
49.
			neuSmall.appendChild(neuNameDate); 
50.
			neuSpan.appendChild(neuSmall); 
51.
			neuSpan.appendChild(document.createElement('br'));	 
52.
			neuNachricht = document.createTextNode(messages[i].getElementsByTagName('nachricht')[0].firstChild.nodeValue); 
53.
			neuSpan.appendChild(neuNachricht); 
54.
			neuSpan.appendChild(document.createElement('br')); 
55.
			showEntry.insertBefore(neuSpan, showEntry.firstChild);		 
56.
		 
57.
		}  
58.
		latestID = messages[0].getElementsByTagName('id')[0].firstChild.nodeValue; //Festlegung der neuen latestID 
59.
		//document.write(latestID); //Debug 
60.
61.
 
62.
    setTimeout('getLatestEntries();',4000); //Erneute Anfrage in vier Sekunden 
63.
  }  
64.
65.
 
66.
 
67.
 
68.
//neue Nachricht auf dem Server erzeugen 
69.
function createNewEntry(name, nachricht) { 
70.
	 
71.
	if (httpCreateNewEntry.readyState == 4 || httpCreateNewEntry.readyState == 0) { 
72.
	 url  = 'http://www.ml-bkf.de/chat/ajaxchatx.php?action=createNewEntry&name=' + name + '&nachricht=' + nachricht;     
73.
     httpCreateNewEntry.open("GET", url, true); 
74.
     httpCreateNewEntry.onreadystatechange = handleHttpCreateNewEntry; 
75.
   	 httpCreateNewEntry.send(); 
76.
77.
78.
 
79.
//behandelt die Antwort des Servers 
80.
function handleHttpCreateNewEntry() { 
81.
  if (httpCreateNewEntry.readyState == 4) { 
82.
  //nachdem eine neue Nachricht erfolgreich erzeugt wurde, wird diese angezeigt 
83.
  	getLatestEntries();    
84.
85.
86.
 
87.
function checkInput(name, nachricht) { 
88.
 
89.
if(name != "" && nachricht != "") { 
90.
createNewEntry(name, nachricht); 
91.
92.
else { 
93.
alert("Bitte sowohl einen Namen, als auch eine Nachricht eingeben!"); 
94.
95.
 
96.
 
97.
98.
 
99.
 
100.
function createXMLHttpReqObj() {  //erzeugt die XMLHttpRequest Objekte 
101.
  
102.
    // für Mozilla etc. 
103.
    if(window.XMLHttpRequest) { 
104.
    	try {  //Fehler abfangen 
105.
			req = new XMLHttpRequest();  
106.
        } catch(e) { 
107.
			req = false; 
108.
109.
    // für den InternetExplorer 
110.
    } else if(window.ActiveXObject) { 
111.
       	try { 
112.
        	req = new ActiveXObject("Msxml2.XMLHTTP"); 
113.
      	} catch(e) { 
114.
        	try { 
115.
          		req = new ActiveXObject("Microsoft.XMLHTTP"); 
116.
        	} catch(e) { 
117.
          		req = false; 
118.
119.
120.
121.
	return req; 
122.
123.
 
124.
 
125.
 
126.
// Initialisierung der beiden Objekte 
127.
var httpGetLatestEntries= createXMLHttpReqObj(); 
128.
var httpCreateNewEntry = createXMLHttpReqObj(); 
129.
 
130.
</script> 
131.
</head> 
132.
 
133.
<body onload="getLatestEntries()"> 
134.
<h1>AJAX Chat Anwendung</h1> 
135.
 
136.
<form name="form1" method="post" action=""> 
137.
  <p>Name<br> 
138.
    <input type="text" name="name" id="name"> 
139.
    <br> 
140.
    <br> 
141.
    Nachricht<br> 
142.
    <input type="text" name="nachricht" id="nachricht"> 
143.
  </p> 
144.
  <p> 
145.
    <input type="submit" name="Submit" value="Submit" onclick="checkInput(document.form1.name.value, document.form1.nachricht.value)" > 
146.
  </p> 
147.
</form> 
148.
<div id="showEntries"> 
149.
 
150.
</div> 
151.
</body> 
152.
</html> 
153.
 
und die ajaxchatx.php:
01.
<?php 
02.
 
03.
header( "Cache-Control: no-cache, must-revalidate" );  
04.
header( "Pragma: no-cache" ); 
05.
header("Content-Type: text/xml; "); 
06.
 
07.
$db_host = "localhost"; // Host  
08.
$db_user = ""; // User  
09.
$db_password = ""; // Passwort 
10.
$db_name = ""; // Datenbank  
11.
 
12.
mysql_connect($db_host,$db_user,$db_password) or die(mysql_error());  
13.
mysql_select_db($db_name) or die(mysql_error()); 
14.
 
15.
 
16.
function getLatestEntries($latestID) { 
17.
 
18.
 $query = "SELECT id, name, nachricht, date FROM ajaxchat WHERE id > $latestID ORDER BY id DESC LIMIT 20";  
19.
 $erg = mysql_query($query);  
20.
 echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"
21.
 echo "<messages>"
22.
    while($erg2=mysql_fetch_array($erg))      
23.
     {  
24.
     echo "<message><id>".$erg2['id']; 
25.
     echo "</id><name>".$erg2['name']; 
26.
     echo "</name><nachricht>".$erg2['nachricht']; 
27.
     echo "</nachricht><date>".date("d.m.Y H:i",$erg2['date']); 
28.
     echo "</date></message>"
29.
 
30.
31.
echo "</messages>"
32.
 
33.
 
34.
35.
 
36.
function createNewEntry($name, $nachricht) { 
37.
 
38.
//HTML Tags entfernen 
39.
$name = strip_tags($name, ''); 
40.
$nachricht = strip_tags($nachricht,'');  
41.
 
42.
 
43.
$query = "INSERT INTO ajaxchat(name, nachricht, date)  
44.
VALUES ('$name','$nachricht','".time()."')"
45.
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
46.
if (!mysql_query($query)) { 
47.
//nicht notwendig, dient nur der Fehlerkontrolle 
48.
echo "<createNewEntry>0</createNewEntry>";} 
49.
else
50.
echo "<createNewEntry>1</createNewEntry>"
51.
52.
53.
 
54.
 
55.
 
56.
if ($_GET['action'] == "createNewEntry") { 
57.
 
58.
createNewEntry($_GET['name'], $_GET['nachricht']); 
59.
 
60.
61.
elseif ($_GET['action'] == "getLatestEntries") { 
62.
 
63.
getLatestEntries($_GET['latestID']); 
64.
 
65.
66.
 
67.
mysql_close(); 
68.
 
69.
?>
Hat jemand eine Ahnung woran das liegen könnte dass es mit dem Firefox nicht funktioniert?

Danke schonmal
und viele Grüße
Niklas
Mitglied: TheBob
14.12.2009 um 08:23 Uhr
Hallo Niklas,

eventuell könnte es daran liegen, dass der Firefox die Seite aus dem Cache holt und gar keinen neuen Request an den Server stellt. Das darf er, da es sich um eine GET-Anfrage handelt.

Vielleicht hilft es, wenn du in der "ajaxchat.htm" das GET in Zeile 25 durch ein POST erstetzt.

Viele Grüße

TheBob
Bitte warten ..
Mitglied: FeuerTeufel
14.12.2009 um 12:39 Uhr
Wenn ich das GET in Zeile 25 und 73 in POST ändere:

01.
httpGetLatestEntries.open("POST","http://www.ml-bkf.de/system/ajaxchatx.php?action=getLatestEntries&latestID="+latestID, true);
sowie in der PHP-Datei

01.
if ($_POST['action'] == "createNewEntry") { 
02.
 
03.
createNewEntry($_POST['name'], $_POST['nachricht']); 
04.
05.
elseif ($_POST['action'] == "getLatestEntries") { 
06.
 
07.
getLatestEntries($_POST['latestID']); 
08.
 
09.
10.
 
schreibe, dann geht gar nichts mehr. Weder im InternetExplorer noch im Firefox. Dann kann man weder Messages speichern noch lesen.
Bitte warten ..
Mitglied: TheBob
14.12.2009 um 13:18 Uhr
Ich dachte auch nur in der htm-Datei ändern, da du die Parameter ja weiterhin per GET übergibst. Hilft das auch nicht?
Bitte warten ..
Mitglied: FeuerTeufel
14.12.2009 um 15:28 Uhr
Das habe ich gerade ausprobiert, POST hat keine auswirkung - selber Fehler wie bei GET.

Ich habe es jetzt malauf POST gelassen - müsste dann bei dir genauso wenig im Firefox funktionieren.
Bitte warten ..
Mitglied: FeuerTeufel
16.12.2009 um 03:43 Uhr
Also ich fass das ganze jetzt nochmal zusammen. Es handelt sich um das oben gepostete Script - in der ajaxchat.htm habe ich Zeile 25 und 73 auf POST geändert.

Mit dem InternetExplorer funktioniert der Chat einwandfrei (nur der Seitenreload beim Senden stört auf der Homepage (www.ml-bkf.de) etwas. Das beeinträchtigt aber nicht die Funktion.


Der Fehler im Firefox ist kurios:
Wenn man den Chat öffnet (http://www.ml-bkf.de/chat/ajaxchat.htm ), zeigt er zwar alle Messages an, speichert aber keine wenn man welche sendet.

Er speichert ebenfalls keine Messages, wenn ein anderer oder man selbst kurz zuvor eine Message an den Chat gesendet/gespeichert hat.

Wartet man hingegen 10-80 Minuten, funktionert das Senden einmalig - danach muss man wieder 10-80 Minuten warten - erst dann kann man wiederholt eine Message an den Chat senden. Mal funktioniert es schon nach 10 Minuten, mal dauert es über eine Stunde. In der Zwischenzeit werden die Messages die man speichern will einfach ignoriert.

Wenn er die Seite wirklich aus dem Cache holt, warum funktioniert es denn nach der genannten Wartezeit im intervall, aber nicht unmittelbar nach dem Seitenaufruf. Das ergibt kein Sinn. Was ist nach 10 bis 80 Minuten Wartezeit anders als vorher?

Bis jetzt scheint es keine Lösung zu geben...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Webentwicklung
AJAX-PHP durch WebRTC für Datenaustausch ersetzen? (1)

Frage von mabue88 zum Thema Webentwicklung ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...