Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung JavaScript

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

Mitglied: FeuerTeufel

FeuerTeufel (Level 1) - Jetzt verbinden

14.12.2009 um 02:54 Uhr, 6982 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 ..
Ähnliche Inhalte
PHP
JavaScript Variable an PHP per AJAX?
gelöst Frage von BuddersPHP6 Kommentare

Guten Morgen liebe Administratoren. Ich habe mal eine Frage bezüglich PHP, Javascript und den dementsprechenden Variablen. Unzwar habe ich ...

Webentwicklung
AJAX-PHP durch WebRTC für Datenaustausch ersetzen?
Frage von mabue88Webentwicklung1 Kommentar

Hallo zusammen, ich habe einen XAMPP Server laufen. Vom Server werden bislang lediglich Daten in Form von Strings an ...

Webbrowser
Firefox 52 und Java (Workaround)
Tipp von ChriBoWebbrowser12 Kommentare

Hi, falls jemand auch dringend Java in Firefox 52 benötigt gibt es zwei Workarounds: 1. Wechsel von Firefox Standard ...

JavaScript
Dropdownfeld auslesen und mit AJAX und JS an PHP senden
gelöst Frage von ITFloriJavaScript7 Kommentare

Hallo zusammen, ich versuche gerade die Auswahl eines Dropdown Menüs in eine Variable schreiben zu lassen und Sie mir ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 2 StundenRouter & Routing

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 9 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 13 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...