Ajax Chat - Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ajax Chat - Problem

    Hi,

    ich habe ein kleines Problem mit einem Chatroom. Ich benutzte PHP + Mysql um die Nachrichten zu speichern und Javascript um sie mittels Ajax zu versenden.
    Alle 5 Sekunden gibt es einen autorefresh und wenn man eine Nachricht sendet wird zusätzlich refreshed (über Ajax).

    Das ganze liegt auf einem Webserver, also nicht lokal bei mir.

    Alles funktioniert soweit gut. Zumindest mit meinen Browern (MSIE 6 & Mozilla 5).

    Gehe ich jetzt aber zu einem Freund and den Computer, der exakt die selbe Version des Browsers hat, gibt es folgenden Fehler:

    Der Chatteilnehmer öffnet den Chat und Ihm werden die letzten 100 Nachrichten angezeigt. Bei mir ist es so, wie man es von einem normalen chat erwartet: ich schreibe eine Nachricht und sie kommt ein bisschen zeitverzögert im Chatfenster an. Bei einigen anderen ist es aber so, dass die Nachricht auch angezeigt wird, dann aber bei dem nächsten Autorefresh verschwindet und nurnoch der Text angezeigt wird der beim öffnen des Chatrooms schon angezeigt wurde. (die letzten 100 Zeilen)

    Da es bei mir funktioniert kann es nicht am PHP Teil des ganzen liegen, da ich sonst auch unvollständige Chats bekommen würde, was nicht der Fall ist.

    Ich vermute das es etwas mit cashing oder ähnlichem zu tun haben muss, finde aber keine Lösung. Teilweise hatte ich den Eindruck dass die POST bz. GET Methoden in unterscheidlichen Browsern besser funktionieren, aber das kann auch nur ein falschen gefühl gewesen sein.

    Ich würde mich sehr freuen wenn mir jemand einen Tipp geben könnte, wie ich es hinbekomme das immer der gesamte bisherige Chatlog ausgegeben wird.

    Vielen Dank

    Hier sind nochmal die wichtigen Javafunktionen:

    Quellcode

    1. var partyID = <? echo $_REQUEST['pid']; ?>;
    2. var serverID = <? echo $_REQUEST['sid']; ?>;
    3. var charName = "<? echo urldecode($_REQUEST['name']); ?>";
    4. var requestObject = false;
    5. var sendMethod = "";
    6. function createRequestObject() {
    7. try {
    8. requestObject = new XMLHttpRequest();
    9. sendMethod = "GET";
    10. } catch (trymicrosoft) {
    11. try {
    12. requestObject = new ActiveXObject("Msxml2.XMLHTTP");
    13. sendMethod = "POST";
    14. } catch (othermicrosoft) {
    15. try {
    16. requestObject = new ActiveXObject("Microsoft.XMLHTTP");
    17. sendMethod = "POST";
    18. } catch (failed) {
    19. requestObject = false;
    20. }
    21. }
    22. }
    23. if(!requestObject) {
    24. alert("Fehler beim Initialisieren des Chats!");
    25. }
    26. }
    27. function sendText(text) {
    28. if(requestObject) {
    29. var url = "";
    30. if(text=="" || text==null) {
    31. url = "chat.php?pid=" + partyID + "&sid=" + serverID + "&name=" + charName;
    32. } else {
    33. url = "chat.php?pid=" + partyID + "&sid=" + serverID + "&name=" + charName + "&msg=" + escape(text);
    34. }
    35. if(requestObject.overrideMimeType) {
    36. requestObject.overrideMimeType('text/xml');
    37. }
    38. requestObject.open(sendMethod, url, true);
    39. requestObject.onreadystatechange = updateChat;
    40. requestObject.send(null);
    41. } else {
    42. alert("requestObject not ready");
    43. }
    44. }
    45. function updateChat() {
    46. if(requestObject.readyState == 4 && requestObject.status == 200) {
    47. var chat = document.getElementById("chatWindow");
    48. var members = document.getElementById("chatMembers");
    49. var content = requestObject.responseText.split('|');
    50. members.innerHTML = "";
    51. chat.innerHTML = "";
    52. for(i=0; i<content.length-1; i++) {
    53. members.innerHTML += content[i] + "<BR>";
    54. }
    55. chat.innerHTML = content[i];
    56. chat.scrollTop = chat.scrollHeight;
    57. }
    58. }
    Alles anzeigen
  • Hi, vielleicht liegts gerade an POST und GET

    POST und GET unterscheidest du nur beim öffnen des dokuments

    wenn du wirklich post verwenden willst (was beim chat ganz sinnvoll ist, da GET maximal 256 Zeichen übermittelt), dann geht das so

    Quellcode

    1. resObjekt.open('POST', 'chat.php');
    2. resObjekt.send("pid=" + partyID + "&sid=" + serverID + "&name=" + charName + "&msg=" + escape(text));


    zum debuggen wäre es auch ganz interessant anzeigen zu lassen, welche der vielen if's und try/catch's denn letztendlich verwendet wurde