Jquery/Ajax - Probleme bei der Parameterübergabe. Hilfe!

Fragen zum Thema HTML, JavaScript, PHP
Antworten
knuff
Beiträge: 1
Registriert: Di Aug 05, 2014 6:45 am

Jquery/Ajax - Probleme bei der Parameterübergabe. Hilfe!

Beitrag von knuff » Di Aug 05, 2014 7:19 am

Hallo zusammen,

Edit: das Problem tritt nun auch bei niedrigeren ids als 50 für last auf. hatte ids im 20ziger bereich für last und alles super, dann habe ich weitere einträge gelöscht und für last wurde somit nur noch id 4 übergeben und chat ist leer. also hat mit 50 nichts zu tun, somit kann ich nicht sagen wann der fehler auftritt, nur das er dauernd auftritt, aber die tatsache, dass das script nicht in die if läuft und id_new kein wert bekommt ist nach wie vor gültig.

ich bin kurz davor Wahnsinnig zu werden! ich habe einen Fehler in meinem script der für mich einfach nur unlogisch ist und ich sehe daher die ursache nicht. ich habe versucht mit der konsole, dem fehler auf die schliche zu kommen. nun den fehler glaube ich gefunden zu haben, aber die ursache nicht. ich hoffe jemand mit mehr erfahrung kann mir weiterhelfen. durch diesen fehler funktioniert das gesamte script nicht und somit komme ich seit 2 tagen nicht weiter und es muss funktionieren.
möchte sich jemand direkt selbst auf die suche machen und die konsole quälen, dann freut mich das natürlich sehr und hier dafür die seite und logindaten:

http://www.sparcubes.de
login: Gast
pw: gast

ich fasse mal zusammen was ich rausgefunden habe. relevante script stellen mit bezug poste ich direkt dazu. die vollständigen quellcodes hänge ich unten an. ich hoffe, dass es so besser nachvollziehbar ist.

noch kurz als vorab info, es handelt sich um einen chat, das sollte vielleicht noch gesagt sein. ^^ so wisst ihr wenn ihr selbst auf der seite schaut auch wenigstens worum es geht. ;)

das problem was ich habe ist, dass der chatstream irgendwann einfach leer bleibt und keine nachrichten mehr geladen werden.
Also was habe ich rausgefunden?

1. habe ich festgestelltdas der fehler auftritt sobald die id-abfrage in der home.php einen wert größer als 50 erhält und als folge plötzlich der chatstream plötzlich leer bleibt.

Als Bezug dieser Auszug:
hierbei handelt es sich um die 50. letzte id im chatlog, die beim ersten aufruf ermittelt wird, damit direkt die letzten 50 beiträge im chat sind.

Code: Alles auswählen

$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 Bezug die chatquery.php:

Code: Alles auswählen

<?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: Alles auswählen

$.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.

Nun der gesamte quellcode als Referenz:

chat.control.js:

Code: Alles auswählen

//Controlling
var last = $("#last_chat_entry").val();
var id_new;
var last2;
var userlist = 60;
var noreload = 0;
function controlling () {
  if (noreload == 0) {
    if (userlist == 60) {
      userlist = 0;
      $.ajax({
        type: "POST",
        url: "/includes/chat/user.on.php",
        success: function (msg) {
          $("#userStream").html(msg);
        }
      });
    }
    userlist++;
    $.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);
        }
      }
    });
    $("#new_chat_entry").val(id_new);
  }
}
controlling();
function loadchat () {
  $.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 ("&auml;","&Auml;","&ouml;","&Ouml;","&uuml;","&Uuml;","&szlig;");
      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: Alles auswählen

<?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'];
?>
loadchat.php:

Code: Alles auswählen

<?php
require_once ("../../config.php");
require_once ("../../connect.db.php");
require_once ("../functions/date.format.php");
$id = $_POST['id'];
$id2 = $_POST['id2'];
$messages = runSQLQuery ("SELECT * FROM chat_log WHERE id > '{$id}' AND id <= '{$id2}' ORDER BY id ASC");
while ($msg = mysql_fetch_array($messages)) {
  $groupid = runSQLQuery ("SELECT groupID FROM user_daten WHERE username = '{$msg['username']}'");
  $groupid = mysql_fetch_array($groupid);
  $chatColor = runSQLQuery ("SELECT chat_color FROM user_groups WHERE groupID = '{$groupid['groupID']}'");
  $chatColor = mysql_fetch_array($chatColor);
?>
<b class="pointer" title = "<?php echo dateFormat($msg['timestamp'],"s"); ?>"><span style="color:<?php echo $chatColor['chat_color']; ?>"><?php echo htmlentities($msg['username']); ?></span></b> - <?php echo htmlentities($msg['message']); ?><br />
<?php
}
?>
Bitte! Bitte! Bitte! Ich weiß nicht mehr weiter! Bin für jede Hilfe dankbar!
gruß
knuff


Benutzeravatar
cloidnerux
Moderator
Beiträge: 3081
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Jquery/Ajax - Probleme bei der Parameterübergabe. Hilfe!

Beitrag von cloidnerux » Di Aug 05, 2014 12:38 pm

Da hat sich ja tatsächlich jemand die Mühe gemacht, denn Text nochmal zu googlen :D
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten