|
|||
ajax erhält keine daten?
Hallo zusammen,
ich weiß es ist sehr viel, aber ich habe bestmöglich versucht meine bisherige fehleranalyse mitzugeben, um vielleicht anhaltspunkte zu liefern. auch wenns viel ist, bitte, bitte, bitte schaut es euch an und versucht mir zu helfen. ich suche schon den ganzen tag den fehler und bekomme nur total widersprüchliche suchergebnisse, was ich unten näher erläutere. es ergibt alles einfach keinen sinn. mein chat script macht was es will, so scheint zumindest. also kurze erläuterung des problems. bem ersten aufruf des chats werden die letzten 50 chateinträge per ajax in den chatstream geladen. danach wird nur noch eine controlling funktion immer wiederholt, die prüft ob es seit der letzten id neue ids gibt, also somit neue einträge und nur diese werden dann mittels .append angefügt. hier mal meine jquery/ajax datei zur verwaltung des chats: Code:
//Controlling var last = $("#last_chat_entry").val(); var id_new; var noreload = 0; function controlling () { //alert ("last" + last); if (noreload == 0) { $.ajax ({ type: "POST", url: "/includes/chat/chatquery.php", success: function (id2) { if (id2 > last) { last2 = last; last = id2; id_new = id2; loadchat(); } else { window.setTimeout("controlling()", 1000); } } }); } } controlling(); function loadchat () { //alert (last2); //alert (last); $.ajax ({ type: "POST", url: "/includes/chat/loadchat.php", data: "id=" + last2 + "&id2=" + id_new, success: function (msg) { zeichen = new Array (/auml/g, /Auml/g, /ouml/g, /Ouml/g, /uuml/g, /Uuml/g, /szlig/g); ersetzen = new Array ("ä","Ä","ö","Ö","ü","Ü","ß"); for (i=0; i<zeichen.length; i++) { msg = msg.replace(zeichen[i],ersetzen[i]); } $("#chatStream").append(msg); window.setTimeout("controlling()", 1000); document.getElementById("chatStream").scrollTop = document.getElementById("chatStream").scrollHeight; } }); } //Message senden $("#msgSenden").submit(function() { if ($("#chatMsg").val() != "") { noreload = 1; $("#response").html("Sende..."); message = $("#chatMsg").val(); $("#chatMsg").val(""); zeichen = new Array (/\u00e4/g, /\u00c4/g, /\u00f6/g, /\u00d6/g, /\u00fc/g, /\u00dc/g, /\u00df/g); ersetzen = new Array ("auml","Auml","ouml","Ouml","uuml","Uuml","szlig"); for (i=0; i<zeichen.length; i++) { message = message.replace(zeichen[i],ersetzen[i]); } $.ajax ({ type: "POST", url: "/includes/chat/sendmsg.php", data: "message=" + message, success: function (msg) { $("#response").html("Gesendet."); $("#chatMsg").focus(); noreload = 0; window.setTimeout("controlling()", 1000); } }); } else { alert ("Bitte gebe eine Nachricht ein!"); } return false; }); $("#chatMsg").keypress(function (event) { if (event.which == 13) { $("#msgSenden").submit(); $("#areacount").html("500"); return false; } }); $("#chatMsg").keyup(function () { $("#areacount").html(500 - $("#chatMsg").val().length); }); chatquery.php: Code:
<?php require_once ("../../config.php"); require_once ("../../connect.db.php"); $id2 = runSQLQuery ("SELECT id FROM chat_log ORDER BY id DESC LIMIT 0,1"); $id2 = mysql_fetch_array($id2); echo $id2['id']; ?> nachdem dies erledigt ist wird controlling nach einem timeout von 1s neu angestoßen und die prüfung beginnt von vorn. sollte bei der prüfung festgestellt werden, dass keine neuen einträge vorhanden sind, dann läuft controlling() direkt in den else zweig und wird wieder nach einem timeout von 1s neu angestoßen. der restliche code ist nicht relevant, weil dieser reibungslos funktioniert, aber zum besseren verständnis hier angefügt. das problem ist nun das der chatstream wunderbar geladen wird solange weniger als 50 einträge vorhanden sind, aber sobald es mehr als 50 einträge im chatlog sind bleibt der chatstream leer, sobald der chat neu geladen wird. interessant dabei ist, dass beim ersten aufruf var last mittels der 50. letzten id gesetzt wird, die wiederum in home.php ermittelt wird, da last sonst beim erstaufruf keinen wert hätte, aber doch bitte die letzten 50 datensätze geladen werden sollen, wird auf diese weise var last beim erstaufruf ein wert zugewiesen. home.php Code:
<?php $timestamp = time(); if ($_SESSION['chatuser_check'] === 0) { $db_res = runSQLQuery ("INSERT INTO chat_user VALUES ('','{$_SESSION['user']}','{$timestamp}')"); if ($db_res) { $_SESSION['chatuser_check'] = 1; } } $startid = runSQLQuery ("SELECT id FROM chat_log ORDER BY id DESC LIMIT 49,1"); $startid = mysql_fetch_array($startid); $startid = $startid == false ? "0" : $startid['id']; ?> <noscript> <h3> Um den Chat nutzen zu können aktivieren Sie bitte JavaScript! </h3> </noscript> <label class="head">Chat</label> <div id="chatbox"> <table id="chatTable"> <col id="chatCol1"><col id="chatCol12"><col id="chatCol3"> <tr> <td> <div id="chatStream"></div> </td> <td></td> <td> <div id="userStream">Muster(noch keine Funktion):<br />User1<br />User2<br />User3<br />User4<br /></div> </td> </tr> <tr> <td> <form id="msgSenden"> <br /> Nachricht:<br /> <textarea id="chatMsg" maxLenght="500"></textarea> <div id="areacount">500</div> <div id="response"></div> </td> <td></td> <td> <br /> <input type="submit" id="submitMsg" value="Senden" /> <input type="text" id="last_chat_entry" value="<?php echo $startid; ?>" /> </form> </td> </tr> </table> </div> <script type="text/javascript" src="/includes/chat/chat.control.js"></script> sehr interessant ist, dass das problem ab mehr als 50 einträgen auftritt und last anfangs wie gesagt mit der 50. letzten id gesetzt wird. ändere ich nun dies in der home und setzte stattdessen die 49. letzte id, dann tritt das problem ab mehr als 49 einträgen auf. lösche ich die gesamte abfrage aus der home, dann is das problem weg und alles wird wieder reibungslos aktualisiert, allerdings ist dies nicht die lösung, da ich ja nen anfangswert brauche, damit beim ersten laden des chats was im chatstream steht. ich will hier nur darauf hinaus, das hier ein zusammenhang zu bestehen scheint, den ich mir allerdings absolut nicht erklären kann. denn die 50. letzte id wird in home.php beim laden des chats über die $startid ermittelt. die aktuelle id wiederum wird erst über ajax von chatquery.php abgefragt und dort wird $id2 für die abfrage verwendet. ich seh da absolut keinen zusammenhang, aber es scheint einer zu sein. vor allem sehe ich deswegen keinen zusammenhang, da ich per alert() herausgefunden habe, dass var last immer korrekt gesetzt wird, aber der funktionsparameter id2 in controlling ab mehr als 50 datensätzen keinen rückgabewert mehr bekommt, ABER chatquery.php liefert nach wie vor den korrekten wert, dies habe ich geprüft, indem ich chatquery.php extern aufgerufen habe, nur dieser wert kommt ab 50 einträgen einfach nicht mehr bei ajax an, bei unter 50 einträgen erhält ajax den wert von chatquery. so suche ich nun seit stunden nach dem fehler, indem ich parameter teste, übergaben teste und und und... aber das ergibt alles einfach keinen sind. die abfragen die scheinbar aufeinander einwirken, aber doch gänzlich unabhängig voneinander bearbeitet werden oder eben das parameter id2 bis 50 einträge die richtigen werte von chatquery.php bekommt, aber ab dem 50. bekommt id2 nichts mehr, obwohl chatquery.php weiter die korrekten werte liefert. ich fühl mich schon, als wenn mich jemand ver**schen will, weil die fehlersuche mir nur ergebnisse liefert, die sich dauernd widersprechen. ich hoffe sehr, dass jemand von euch mir mit den gelieferten infos helfen kann. bitte! bitte! bitte! nun habe ich die reg deaktiviert und kann somit auch mal, die domain posten: www.sparcubes.de login: Gast pw: gast gruß knuff Geändert von knuff (04.08.2014 um 05:06 Uhr) |
Sponsored Links |
|
||||
Wo genau soll da ein Chat sein? Die Seite sagt: ich kann mich anmelden.
Was sagt denn die Konsole? Jetzt noch ein letztes mal im Guten: Großschreibung beachten: dein Text sagt nach 3 Zeilen lesen "Hör auf mich zu lesen, ich bin so schlecht lesbar, das glaubst du nicht!"
__________________
Hier ein immer gültiges Statement: Überarbeite deine Code, lerne die Grundlagen, widersprich mir nicht, wehre dich nicht, ich habe Recht, wir sind Lolgion, wir sind viele.. potato... All meine Angaben sind ohne Gewähr, es könnte also trotz meiner Unfehlbarkeit dazu kommen dass ich falsch liege www.richard-thiel.de | Müssen Websiten überall gleich ausschauen? |
Sponsored Links |
|
|||
Zitat:
gruß knuff |
|
|||
weiß keiner rat? bitte um hilfe!
EDIT: also ich habe mich mal mit der konsole auseinander gesetzt, allerdings führen mich die infos die ich erhalten habe nicht zur fehlerursache. da ich aber sehr unerfahren mit der konsole bin, hoffe ich, das mir jemand der mehr erfahrung mit der konsole hat, mit den erhaltenen infos weiterhelfen kann. 1. habe ich festgestellt, dass das problem nicht, wie zuvor angenommen auftritt, wenn mehr als 50 beiträge im chatlog sind. vielmehr ist es so, das sobald die id-abfrage in der home.php einen wert größer als 50 erhält, der besagte fehler auftritt, dass der chatstream plötzlich leer bleibt. Zur Erinnerung dieser Auszug, das gesamte Script ist im ersten Post zu finden: Code:
$startid = runSQLQuery ("SELECT id FROM chat_log ORDER BY id DESC LIMIT 49,1"); $startid = mysql_fetch_array($startid); $startid = $startid == false ? "0" : $startid['id']; ... ... ... <input type="text" id="last_chat_entry" value="<?php echo $startid; ?>" /> hier als errinnerung die chatquery.php: [CODE] <?php require_once ("../../config.php"); require_once ("../../connect.db.php"); $id2 = runSQLQuery ("SELECT id FROM chat_log ORDER BY id DESC LIMIT 0,1"); $id2 = mysql_fetch_array($id2); echo $id2['id']; ?> 3. habe ich im debugging-mode festgestellt, dass id2 (gleich id_new) an der unten markierten scriptstelle von chatquery.php den korrekten wert erhält: Code:
$.ajax ({ type: "POST", url: "/includes/chat/chatquery.php", >>> success: function (id2) { <<< if (id2 > last) { last2 = last; last = id2; id_new = id2; loadchat(); } else { window.setTimeout("controlling()", 1000); } } }); 4. setze ich in der if-bedingung id2 oder last händisch auf den aktuell entsprechenden wert, dann funktioniert es wieder, was zudem dafür spricht, das es bei der wertübergabe an die if probleme gibt. ABER WARUM? bis last <= 50 funktioniert alles einwandfrei bei last > 50 erhält last nach wie vor den korrekten wert und id2 erhält laut debugging auch den richtigen wert, aber die if wird nie ausgeführt (was sie aber sollte) und id_new = id2 wird nie gesetzt. ich finde das alles so unlogisch und sehe absolut nicht die ursache für diesen fehler. Bitte! Bitte! Bitte! Ich weiß nicht mehr weiter! Bin für jede Hilfe dankbar! gruß knuff Geändert von knuff (05.08.2014 um 08:35 Uhr) |
|
|||
Zitat:
und unter Sparcubes.de login: Gast pw: gast kannst du auch alles in aktion sehen. was meine erläuterungen angeht. ich habe versucht so gut es mir möglich war wiederzugeben, was ich bisher rausgefunden habe, in der hoffnung, dass es dem Helfer hilft. falls ich kein talent dafür habe das zu erklären sorry. würde mich super freuen, wenn du mir helfen kannst. gruß knuff Geändert von knuff (05.08.2014 um 09:27 Uhr) |
|
|||
aber ich muss doch unterschiedliche informationen abrufen. user online, chatstream laden, neueste id für die prüfung. wie soll ich das mit einem ajax request machen?
hier mal der versuch einer kurzerklärung was das system tut: 1. home.php stellt das html gerüst für den chat und fragt die 50. letzte id aus dem chatlog ab, um somit die letzten 50 nachrichten laden zu können, was später in der .js geschieht, daher wird dieser wert auch per input hidden übergeben. 2. in der chat.control.js wird die controlling() angestoßen, diese prüft ob die aktuelle id (id2 bzw. id_new) größer als die letzt id (last bzw. last2) ist, wenn dies der fall ist läuft das script in die if und führt loadchat aus, wenn nicht wird die controlling() über den else zweig nach 1s wieder angestoßen. 3. die loadchat() läd wie der name schon sagt die nachrichten aus und übergibt sie an dem stream. beim ersten aufruf tut sie dies anhand der 50. letzten id die aus home.php kommt und der aktuellsten, die in controlling() abgefragt wurde und per id_new weitergegeben wurde. danach wird last auf last = id_new gesetzt und für die nächste prüfung in controlling() id_new bzw. id2 neu ermittelt und alles startet von vorn. dies dient dazu nur beim ersten aufruf die lietzten 50. nachrichten zu laden und danach nur noch die neu dazugekommenen, wegen der performance. die senden funktion unterbricht mithilfe von var noreload das controlling für die dauer des sendens, damit beim senden die performance verbessert wird. hier gibt es keinerlei probleme ich hoffe das hilft irgendwie. gruß knuff |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Anfängerfrage: XML Daten in HTML Datei per Ajax ausgeben | mimii | Javascript & Ajax | 5 | 18.08.2011 12:08 |
Kann man via JQuery oder AJAX auf Daten in einer Datenbank zugreifen? | tru2010 | Javascript & Ajax | 1 | 25.05.2011 00:41 |
Daten per Ajax der Datenbank hinzufügen, IE bockt | Nars | Javascript & Ajax | 10 | 24.08.2007 15:22 |
Ajax Daten per post übertragen | Beach | Javascript & Ajax | 2 | 30.07.2007 20:52 |
Buchrezension: AJAX - Frische Ansätze für das Webdesign | Flocke | Ressourcen | 2 | 01.11.2005 23:08 |