PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Jquery Logik problemchen ;)


Bösewicht
2012-04-13, 12:30:29
Ich stecke ein wenig in der klemme und ich weiss nicht genau warum eigentlich:rolleyes:

#################
Das Script funktioniert, es tut was es soll und alles ist schön bis auf eine Sache.
Schließe ich das Dialog (ich hab es auch schon mit destroy, close und der gleichen am Ende probiert) und schreibe mir von einen anderen Account selbst eine Nachricht dann blinkt sie für ein kurzen Moment auf und verschwindet wieder und das darf nicht passieren bevor ich da drauf klicke und sich das Dialog Öffnet.

Das Script läuft also so wie ich mir das jetzt denke im Hintergrund weiter und sobald die if Abfrage auf neue Nachrichten stößt öffnet es im Hintergrund die php/ms/refresh.php?.
Wobei das eigentlich nicht schlimm ist denn die php/ms/ms.php Schreibt die Lese Bestätigung in die Datenbank.

Nach meiner Logik darf das nicht passieren weil ich alles in die Open Funktion gelegt habe und es eigentlich auch nur ausgeführt werden darf wenn die openDialog2 am laufen ist.

Wisst ihr Rat ich bin denn Code schon hunderte male durchgegangen und erkenne mein Fehler nicht.


<script type="text/javascript">
$(document).ready( function() {
$("#dialog2").css({ overflow: 'hidden' })
$("#dialog2").dialog({
resizable: false,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 810,
height: 500
});
});
// Öffnet das Dialog und startet die Schleife. Der ganze Inhalt der OpenDialog2 darf nur ausgeführt
// werden wenn das Dialog auch wirklich geöffnet ist und genau das ist mein Problem :(
// Beim Öffnen der php/ms/ms.php?un="var" wird eine Lesebestätigung ausgeführt!
function openDialog2(title, text) {
$("#dialog2").css({ overflow: 'hidden' })
$("#dialog2").dialog({
resizable: true,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 590,
height: 445
});
$("#dialog2").html(text).dialog('option','title',title).dialog('open');
$("#dialog2").load("php/ms/ms.php?un="+text+"");

$('#dialog2').load("php/ms/ms.php?un="+text+"", function() {
// die function führt die refresh.php 1x aus damit im falle von keiner neuen Nachricht
// trotzdem alle Alten Nachrichten Anzeigt werden.
$("#ms_refresh").load("php/ms/refresh.php?un="+text+"");
// Die Schleife soll und darf nur ausgeführt werden wenn das Dialog
// geöffnet ist was aber leider nicht der fall ist
// schleife aktualisiert sich alle 10 Sekunden
var refreshId = setInterval(function() {
$.get("php/ms/check.php", // prüft ob neue nachrichten vorhanden sind.
function(data){
if (data == "0"){
// keine neue Nachricht
}else{
// neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/refresh.php?un='+text+'&'+ Math.random());
}
}
);
}, 10000); // schleife ende
$.ajaxSetup({ cache: false });
}); //function() { Close
} // openDialog2 ende
</script>

universaL
2012-04-13, 14:42:48
so spontan vom überfliegen:

beim schließen des Dialogs den Timer beenden, der läuft sonst weiter.

und du hast 2mal:

$("#dialog2").load("php/ms/ms.php?un="+text+"");

Bösewicht
2012-04-13, 16:33:48
so spontan vom überfliegen:

beim schließen des Dialogs den Timer beenden, der läuft sonst weiter.

und du hast 2mal:

$("#dialog2").load("php/ms/ms.php?un="+text+"");
timer hab ich mit var $isOpen = $('#dialog2');
if ($isOpen.dialog('isOpen') == true) { hoffentlich gestopt.
Der Eintrag muss 2x sein da ich sonst 2x klicken muss bis der Inhalt angezeigt wird.

Ich hab mich im ersten Post leicht vertan, es ist nicht die ms.php sondern natürlich die refresh.php die nachrichten als gelesen markiert.
der if Open scheint auch zu Funktionieren denn das Problem hat sich damit fast Erledigt.

Ich habe das Gefühl das hier der Knochen Begraben liegt.

function(data){
if (data == "0"){
}else{
// neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/refresh.php?un='+text+'&'+ Math.random());
}
}

Lösche ich das rot markierte funktioniert alles super nur es aktualisiert sich natürlich nichts:frown:
Ich vermute das +text+' speichert solange denn wert (username) bis eine neue nachricht kommt.
Und einschreiben tut es sich wenn eine neue nachricht gelesen wurde vorher funktioniert ja noch alles.

Ist das Dialog geöffnet und es kommt eine nachricht von xy dann springt es automatisch auf xy.
Das ist mist grrrrr

Muss erst mal pause machen meine nerven brennen sonst durch;D
Für weitere Vorschläge wäre ich sehr dankbar:wink:


<script type="text/javascript">
$(document).ready( function() {
$("#dialog2").css({ overflow: 'hidden' })
$("#dialog2").dialog({
resizable: false,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 590,
height: 445
});
});
function openDialog2(title, text) {
$("#dialog2").html(text).dialog('option','title',title).dialog('open');
$("#dialog2").load("php/ms/ms.php?un="+text+"");

$('#dialog2').load("php/ms/ms.php?un="+text+"", function() {
$("#ms_refresh").load("php/ms/refresh.php?un="+text+"");
// bis hier hin klappt es gut, nur das fenster aktualisiert sich nicht // return false;
var refreshId = setInterval(function() {

var $isOpen = $('#dialog2');
if ($isOpen.dialog('isOpen') == true) {

$.get("php/ms/check.php?un="+text+"",
function(data){
if (data == "0"){
}else{
// neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/refresh.php?un='+text+'&'+ Math.random());
}
}
);
} // if isOpen ende
}, 3000);
$.ajaxSetup({ cache: false });
}); //function() { ende
} // openDialog2 ende
</script>

Sephiroth
2012-04-13, 20:13:49
Nein du beendest deinen Timer nicht. Dafür müsstest du nämlich
clearInterval(refreshId);
irgendwo aufrufen.

Probier mal folgendes

$(document).ready( function() {
$("#dialog2").css({ overflow: 'hidden' });
$("#dialog2").dialog({
resizable: false,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 590,
height: 445
});
});
function openDialog2(title, text) {
$("#dialog2").html(text).dialog('option','title',title).dialog('open');
$("#dialog2").load("php/ms/ms.php", {"un":text});

$('#dialog2').load("php/ms/ms.php", {"un":text}, function(responseText, textStatusOuter, XMLHttpRequest) {
$("#ms_refresh").load("php/ms/refresh.php", {"un":text});
// bis hier hin klappt es gut, nur das fenster aktualisiert sich nicht // return false;
var refreshId = setInterval(function() {
if ($('#dialog2').dialog('isOpen')) {
$.get("php/ms/check.php", {"un":text}, function(data, textStatusInner, jqXHR){
if (data == "0"){
}else{
// neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/refresh.php', {"un":text, "rand":Math.random()});
}
});
} // if isOpen ende
else {
// cancel interval
clearInterval(refreshId);
}
}, 3000);
$.ajaxSetup({ cache: false });
}); //function() { ende
} // openDialog2 ende

Bösewicht
2012-04-13, 21:10:11
vielen Dank.
Er erkennt zwar aktuell nicht die Übergabe des Usernamen aber da kann ich ja bisschen fummeln das es wieder geht.
Das gibt mir wieder ein wenig Hoffnung denn das lässt mir einfach keine Ruhe.

mfg
Bösewicht.

Sephiroth
2012-04-13, 21:18:57
eventuell musst du überall bei
{"un":text}
usw die Anführungszeichen entfernen, bin mir da nicht sicher gewesen ...

Bösewicht
2012-04-16, 12:41:48
leider hat es das Problem auch nicht gelöst.

Ich dachte das könnte Helfen
function openDialog2(title, text) {
if ($('#dialog2').dialog('isOpen')) {
$("#dialog2").dialog('close');
$(this).dialog('destroy');
}{
und von vorne, aber auch das hilft nichts.
Der effekt schaut aber super aus muss ich ja sagen vorallem wenn er mit effekte ein, aus und wieder eingeblendet wird!
Irgendwie beisst sich das "+text+ komplett fest im
// neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/refresh.php', {"un":text, "rand":Math.random()});

Dann dachte ich gut wird halt für jeden Benutzer (10 Clan Mitglieder ;D)
ein eigenes dialog geöffnet...
Hat mir super gefallen die idee und ich experementierte eine Runde mit
$('<div id="id"></div>').dialog();
doch krieg mal die ID aus dem link als id in die div, stell noch das ganze dialog dazu neu ein und bringt das alles mit denn code oben zusammen...
vorallem wie das +text+ in die id bekommen und überhaupt hätte ich das ganz oben dazu packen müssen und dort gibt es denn +text+ Inhalt noch nicht hmpf
Nach einen halben Tag hab ich das aufgegeben.
leider.

Eben hab ich noch versucht die functions ein Name zu geben und die functions test(derinhalt){*code} mit functions test(derinhalt){*leer*} zu überschreiben z.b beim schließen des dialogs (das false bei ifOpen) und extra nochmal oben beim Dialog Open function, aber auch das half nicht

Bösewicht
2012-04-16, 14:36:22
Inzwischen schaut es so aus.


$(document).ready( function() {
});
function openDialog2(title, text) {
var id = text;
$('body').append('<div id="' + id + '">' + id + '</div>');
$('#' + id).dialog({
resizable: false,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 590,
height: 445,
title: title,
close: function(event, ui) {
$('#' + id).dialog('destroy').remove();
}
});
$('#' + id).html(id).dialog('option','title',title).dialog('open');
$('#' + id).load("php/ms/ms.php?un="+id+"");
$('#' + id).load("php/ms/ms.php?un="+id+"", function(responseText, textStatusOuter, XMLHttpRequest) {
$("#ms_refresh").load("php/ms/response.php?un="+id+"");
var refreshId = setInterval(function() {
if ($('#' + id).dialog('isOpen')) {
$.get("php/ms/check.php?un="+id+"&"+ Math.random()+"",
function (data, textStatusInner, jqXHR){
if (data == "0"){
}else{ // neue nachrichten anzeigen
$("#ms_refresh").load('php/ms/response.php?un='+id+'&'+ Math.random()); }
} // function data ende
); // Ajax get ende
} // if isOpen ende
else {
// cancel interval
clearInterval(refreshId);
}
}, 3000); // Timer ende
$.ajaxSetup({ cache: false }); // Ajax Setup
}); //function() { ende
} // openDialog2 ende


Bin ja fast an die Decke gesprungen als ich seh das ein zweites Dialog sich öffnet und im Titel der Name auf denn ich geklickt habe stand...
Aber leider noch immer das gleiche er öffnet denn Inhalt im alten Dialog und das neue bleibt leer.
Klicke ich auf ein dritten username öffnet sich ein drittes Fenster ansonsten das selbe Spielchen es bleibt leer und öffnet sich im ersten.

lol ich bin zu doof für jquerry wo alle welt drüber schreibt das es nichts einfacheres gibt;D

Bösewicht
2012-04-16, 14:58:58
nein bin ich blöööööööööööööd
lol
Ich hab doch wirklich an Zwei stellen vergessen
("#im_refresh") mit ('#' + id) zu ersetzen...

Jetzt funktioniert das *freu*

Ich rufe denn Code übrigens mit
<a href="" onclick="openDialog2('<?php echo $row['un'];?>', '<?php echo $row['un'];?>'); return false;">
auf


<script type="text/javascript">
function openDialog2(title, text) {
var id = text;
$('body').append('<div id="' + id + '">' + id + '</div>');
$('#' + id).dialog({
resizable: false,
autoOpen: false,
modal: false,
stack: true,
show: "fold",
hide: "fold",
width: 590,
height: 445,
title: title,
close: function(event, ui) {
$('#' + id).dialog('destroy').remove();
}
});
$('#' + id).html(id).dialog('option','title',title).dialog('open');
$('#' + id).load("php/im/im.php?un="+id+"");
$('#' + id).load("php/im/im.php?un="+id+"",
function(responseText, textStatusOuter, XMLHttpRequest) {
$('#' + id).load("php/im/response.php?un="+id+"");
var refreshId = setInterval(function() {
if ($('#' + id).dialog('isOpen')) {
$.get("php/im/check.php?un="+id+"&"+ Math.random()+"",
function (data, textStatusInner, jqXHR){
if (data == "0"){}else{
$('#' + id).load('php/im/response.php?un='+id+'&'+ Math.random()); }
}
);
} else {
clearInterval(refreshId);
}
}, 3000);
$.ajaxSetup({ cache: false });
});
}
</script>


Viel spaß:wink: