zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden ajax erhält keine daten?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 04.08.2014, 03:31
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard 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);
});
kurze erklärung was die funktionen tun. also aufgerufen wird die controlling() beim laden der seite und dann geht es quasi immer rund in einer endlosschleife. controlling prüft, ob neue datensätze in der db eingetragen wurden, seit der letzten aktualisierung und sollte dies der fall sein, dann wird die funktion loadchat() geladen und mittels der aktuellen id der "letzten" aktualisierung (last2 hilfsvar zu last; last zur prüfung und last2 für aktualisierung) und der aktuellen id der "jetzigen" aktualisierung (id2 bzw. var id_new; id2 zur prüfung und id_new zur aktualisierung) nur die neuen einträge aus der db an ajax übertragen und mittels .append angefügt. chatquery.php liefert dem ajax request in controlling() die höchste id im chatlog und vergleicht diese dann mit last, ob neue einträge da sind.

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 04:06 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 04.08.2014, 11:22
Benutzerbild von Thielo
Web Ninja
XHTMLforum-Kenner
 
Registriert seit: 17.09.2009
Ort: Stuttgart oder so
Beiträge: 3.372
Thielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein Lichtblick
Standard

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?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 04.08.2014, 17:10
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Thielo Beitrag anzeigen
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!"
Der Chat ist im internen Bereich, darum ja auch die Gast Logindaten. Und ich hatte noch nie jemand, der so empfindlich wegen Groß- und Kleinschreibung ist. Im Englischen wird alles klein geschrieben, ist Englisch eine so schlecht lesbare Sprache?

gruß
knuff
Mit Zitat antworten
  #4 (permalink)  
Alt 04.08.2014, 21:27
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

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; ?>" />
2. habe ich über die konsole über console.log herausgefunden, dass id_new und last, solange last vom obigen script eine id kleiner gleich 50 erhält, immer die korrekten werte zugewiesen bekommen und alles einwandfrei funktioniert. ABER sobald last über das obige script einen wert größer 50 erhält gibt console.log den korrekten wert für last zurück aber für id_new nur undefined, obwohl id_new = id2 ist, und dieser wert über chatquery.php per ajax ermittelt wird (siehe punkt 3). daher sehe ich den zusammenhang nicht, warum es da zu fehlern kommt und warum bei id größer gleich 50 aber darunter nicht?

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);
        }
      }
    });
aber das script dennoch nicht in die if-bedingung hineinläuft und wie schon erwähnt id_new nie einen wert erhält, aber zur erinnerung last hat zu jeder zeit den korrekten wert. somit scheint das problem bei id2 zu liegen. diese erhält zwar den korrekten wert von chatquery.php und last hat ebenfalls den korrekten wert, womit die if-bedingung erfüllt wäre, aber das script läuft in die if nicht rein, womit nie loadchat ausgeführt wird und somit nie der chatstream geladen wird. wie gesagt laut debugging erhält id2 den korrekten wert, aber id_new (was gleich id2) wird nie gesetzt, folge script läuft nicht in die if. solange last eine id kleiner 50 hat funzt alles wunderbar.

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 07:35 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 05.08.2014, 08:08
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Aus den Code Fragementen und deinen epischen Erläuterungen läßt sich kaum eine Fehlerursache ermitteln. Man müßte das ganze in Aktion sehen, um das zu beurteilen.
Mit Zitat antworten
  #6 (permalink)  
Alt 05.08.2014, 08:25
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von protonenbeschleuniger Beitrag anzeigen
Aus den Code Fragementen und deinen epischen Erläuterungen läßt sich kaum eine Fehlerursache ermitteln. Man müßte das ganze in Aktion sehen, um das zu beurteilen.
im ersten post ist doch der gesamte code.

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 08:27 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 05.08.2014, 08:56
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Ich antworte mal hier, da der Chat zu hakelig läuft.

Also ich sehe das Problem in deiner Logik. Schreib dir mal auf, was dein Javascript macht, du müßtest auf ein weitverzweigtes System von AJAX Aufrufen kommen, die sich sicher gegenseitig behindern.

Wenn man deine Beschreibungen liest, paßt das, so wie du versuchst das Problem zu beschreiben, so ist dein Skript aufgebaut und ich vermute (hab auf die Schnelle, DEN Fehler nicht entdecken können) daher einfach, dass du dich da etwas verheddert hast und die vielen unterschiedlichen AJAX Aufrufe sich in gegenseitig in die Quere kommen.

Bei sowas ist es besser, wenn es nur eine einzige Stelle mit einem AJAX Call gibt.
Mit Zitat antworten
  #8 (permalink)  
Alt 05.08.2014, 09:09
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ä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 11:08
Kann man via JQuery oder AJAX auf Daten in einer Datenbank zugreifen? tru2010 Javascript & Ajax 1 24.05.2011 23:41
Daten per Ajax der Datenbank hinzufügen, IE bockt Nars Javascript & Ajax 10 24.08.2007 14:22
Ajax Daten per post übertragen Beach Javascript & Ajax 2 30.07.2007 19:52
Buchrezension: AJAX - Frische Ansätze für das Webdesign Flocke Ressourcen 2 01.11.2005 22:08


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:03 Uhr.