ajax (wenn wert geändert)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

ajax (wenn wert geändert)

Beitrag von phillip »

hallo ^^

hab mal wieder eine frage zu ajax.

und zwar mach ich eine einfache abfrage, alle 5 sekunden.

das klappt auch gut ;-)

jetzt möchte ich ein fade einbauen, dass aber nur erscheint, wenn der wert sich geändert hat. die function, und der fade steht schon, leider fadets aber all 5 sek xD

ich hoff, der folgende text ist nicht zu lang, sonst einfach schnell melden, und nicht gleich sperren, danke :-)

Code: Alles auswählen

function setOpacity( value ) {
 document.getElementById("msg_alert").style.opacity = value / 10;
 document.getElementById("msg_alert").style.filter = 'alpha(opacity=' + value * 10 + ')';
}

function fadeIn() {
 for( var i = 0 ; i <= 100 ; i++ )
   setTimeout( 'setOpacity(' + (i / 10) + ')' , 8 * i );
}


function load_priv_msg()
{ 

    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();     }
          catch (e3) {  xhr = false;   }
        }
     }

	xhr.onreadystatechange = show_msg;
      	xhr.open('GET', 'ajax_files/priv_msg.php', true);
      	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    
	xhr.send(null); 


function show_msg()
		{ 


						if(xhr.readyState == 4)
			{
				if(xhr.status == 200)
				{


if (xhr.responseText > 0)
{

document.getElementById('msg_alert').style.display = 'block';

fadeIn();

if (xhr.responseText < 10)
{

					document.getElementById('msg_alert').innerHTML  =   '<span style="margin-left: 3px;">' + xhr.responseText + '</span>';

}
if (xhr.responseText > 10)
{

document.getElementById('msg_alert').innerHTML  =   xhr.responseText;
}



}	
				}	
					
			} 
		}; 

	setTimeout("load_priv_msg()",5000);	

} 
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

niemand eine idee?
Bernd68
Mitglied
Beiträge: 2
Registriert: 13.01.2008 12:43

Beitrag von Bernd68 »

phillip hat geschrieben:niemand eine idee?
Wenn ich alles richtig gesehen habe, durchläuft der Timer alle 5 sec.
die Schleife... (ist ja auch schon spät :-)

Da Du den Fade nur haben möchtest wenn sich ein Wert ändert
(ich weiss nicht welchen Wert Du meinst...) , würde ich dort,
wo sich der Wert ändern kann mit "onChange=fadeIn();" arbeiten.

Wenn Du das nicht so gemeint hattest.. dann vergiss meinen Text
direkt wieder *gg*

Viele Grüsse
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

ja ich denke, es geht schon in diese richtung ^^

mit dem wert meine ich die anzahl ungelesene private nachrichten ;-)

das heisst, es gibt z.B eine neue nachricht -> fadein()
jetzt kommt eine minute lang keine neue nachricht, also kein fadein().

plötzlich ändert sich der wert auf 2 -> wieder fadein()
Bernd68
Mitglied
Beiträge: 2
Registriert: 13.01.2008 12:43

Beitrag von Bernd68 »

*jap*

ich glaube Du solltest den Timer von Anfang an deaktivieren.
Und erst na der Action den Timer starten. In der Function wo der
Fade abläuft, deaktivierst Du den Timer für den Fade wieder (am Ende).

function setTimers() {
mytimer = window.setTimeout("load_priv_msg()",5000);
}

// Also das document.getElementById wegmachen....

Dort, wo sich der Wert ändert oder ändern kann...:

... onChange=setTimers();

Das müsste eigentlich so klappen.

LG
Antworten

Zurück zu „Coding & Technik“