zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden counter der beim reload weiter läuft

Antwort
 
LinkBack Themen-Optionen Ansicht
  #41 (permalink)  
Alt 06.04.2015, 16:59
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2010
Beiträge: 177
SpecialFighter befindet sich auf einem aufstrebenden Ast
Standard

habe jetzt folgenden Countdown bei dem eigentlich alles klappt:
Javascript CountDown - little web things

es gibt sogar eine Oncomplet Function, dass wenn der Timer durchgelaufen ist, eine Funktion ausgeführt wird. Javascript CountDown examples - little web things

Habe diese jetzt angepasst:

Code:
<script language="javascript" type="text/javascript">
			
jQuery(document).ready(function() {
var day = <? echo $energy_datum_array[0]; ?>;
var month = <? echo $energy_datum_array[1]; ?>;
var year = <? echo $energy_datum_array[2]; ?>;
var hour = <? echo $energy_uhrzeit_array[0]; ?>;
var min = <? echo $energy_uhrzeit_array[1]; ?>;
var sec = <? echo $energy_uhrzeit_array[2]; ?>;
			
			
jQuery('#countdown_dashboard').countDown ({
targetDate: {
	'day': 	day,
	'month': 	month,
	'year':	year,
	'hour':	hour,
	'min':	min,
	'sec': 	sec
}, 
					
//onComplete function
onComplete: function() { 
jQuery( "#live_update_energy" ).load( "inc/live_update_energy.php" );	
					jQuery('#countdown_dashboard').stopCountDown();
										jQuery('#countdown_dashboard').setCountDown({
													targetDate: {
															'day': 	day,
	'month': 	month,
	'year': 	year,
	'hour':	hour,
	'min': 	min,
	'sec': 	sec + 300
}
});															
										jQuery('#countdown_dashboard').startCountDown();
sec = sec + 300
		}
	})
});
</script>

Der PHP Code:
PHP-Code:
// Energy Timer
$sql 'SELECT `energy_time` FROM `user` WHERE `ID` = "'.$_SESSION['user_id'].'"';
$ergebnis $db->query$sql ); 
                                    
if (
$ergebnis->num_rows != 0)
    {
        while (
$zeile $ergebnis->fetch_object())
            {

                if ( (
time() - $zeile->energy_time) >= 300 // 300 sek = 5 min.
                    
{
                        if ( (
time() - $zeile->energy_time) >= 310 )
                            {
                                
// User abwesend => nachträglich Punkte für Enegery zuweisen
                                
$punkte_abwesenheit = (($b $a) / 60) / 5;
                                
$punkte_abwesenheit round($punkte_abwesenheit0PHP_ROUND_HALF_UP); 
                            }
                        else
                            {
                                
$punkte_abwesenheit 0;
                                echo 
time() - $zeile->energy_time;
                            }

                                                
                        
$new_timestamp time()+300;
                        
$update 'UPDATE  `user` SET `energy_time` = "'.$new_timestamp.'", `energy` = `energy`+"'.$punkte_abwesenheit.'" WHERE `ID` = "'.$_SESSION['user_id'].'"';  
                        
$result $db->query$update );
                        
$energy_time $new_timestamp;
                    }
                else    
                    { 
                        
$energy_time $zeile->energy_time;
                    }
                    
                
$_SESSION['energy_datum'] = date("d.m.Y",$energy_time);
                
$energy_datum_array explode("."$_SESSION['energy_datum']);
                
                
$_SESSION['energy_uhrzeit'] = date("H:i:s",$energy_time);
                
$energy_uhrzeit_array explode(":"$_SESSION['energy_uhrzeit']);                    

            }
    } 

Problem:
Sobald der neue Counter aus der oncomplete Funktion ausgeführt wird und ich in diesem Zeitraum die Seite neu lade, wird immer wieder die Datei live_update_energy.php ausgeführt, da ich mich in der oncomplete funktion befinde.

Hoffe das war verständlich.
Könnt ihr mit bei meinem Problem helfen?
Danke
Mit Zitat antworten
Sponsored Links
  #42 (permalink)  
Alt 06.04.2015, 18:06
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

Du befindest dich nach einem Seiten-Reload nicht in der Oncomplete-Funktion da ist dann eher was im PHP falsch als im Script.

Aber wie wäre folgendes: hör auf täglich ein Script zu wechseln weil es nicht 100% das macht was du willst, schreib den Kram doch einmal selbst und gut ist.
Die Ansätze hat man dir genannt. Aber wir sind hier nicht da dir bei deinen Problemen alles vorzukauen.
__________________
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
  #43 (permalink)  
Alt 06.04.2015, 20:26
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2010
Beiträge: 177
SpecialFighter befindet sich auf einem aufstrebenden Ast
Standard

wenn du richtig lesen würdest, müsstest du nicht meine Probleme vorkaufen, sondern könntest mir dabei auch helfen - dafür ist ein Forum gedacht.

ich befinde mich in der oncomplete funktion.
allerdings wenn ich währenddessen die seite neulade, läd er mir jedes mal die dort enthaltene php funktion neu. das soll er natürlich nicht machen.
Mit Zitat antworten
  #44 (permalink)  
Alt 07.04.2015, 09:51
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

Zitat:
Zitat von SpecialFighter Beitrag anzeigen
ich befinde mich in der oncomplete funktion.
Nein! Sicher nicht.

Wenn diese Eventfunktion wirklich nach einem reload direkt aufgerufen wird, dann wurde der Event ausgelöst. D.h. die Werte mit denen er aufgerufen wurde sind Null. Das wird aber aus deinem Code nicht ersichtlich, da du uns nur den PHP Code zeigst, der bei einem JS Problem aber nicht relevant ist.

Zitat:
Zitat von SpecialFighter Beitrag anzeigen
allerdings wenn ich währenddessen die seite neulade, läd er mir jedes mal die dort enthaltene php funktion neu. das soll er natürlich nicht machen.
Aus deinem Code wird nicht ersichtlich warum das geschehen sollte. Aber evtl. stimmt etwas mit deinen Berechnungen nicht?
Mit Zitat antworten
  #45 (permalink)  
Alt 07.04.2015, 10:01
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2010
Beiträge: 177
SpecialFighter befindet sich auf einem aufstrebenden Ast
Standard

was kann ich euch denn noch zur Verfügung stellen, damit ihr es analysieren könnt. ich muss mich in der oncomplete function befinden.

habe nämlich testweise darin einen alert mit hinzugefügt und wenn ich dann jedes mal die Seite neulade, kommt diese alert Meldung.
Mit Zitat antworten
  #46 (permalink)  
Alt 07.04.2015, 10:21
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

Dann ist es so wie ich sage, die Werte die dein PHP Skript übergibt sind null und der event wird direkt aufgerufen.

Bei einem JS Problem ist nur der Code Relevant, der im Browser ankommt.
Mit Zitat antworten
  #47 (permalink)  
Alt 07.04.2015, 10:24
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

Lad einen Testcase hoch, kann doch nicht so schwer sein etwas zu tun, was hier in den Regeln steht.

Zitat:
Zitat von SpecialFighter Beitrag anzeigen
wenn du richtig lesen würdest, müsstest du nicht meine Probleme vorkaufen, sondern könntest mir dabei auch helfen - dafür ist ein Forum gedacht.
Was das betrifft, verstehe ich a) nicht warum du meinst mich hier mehr oder minder anzupampen, b) wo ich deine "Probleme vorkaufe"

Aber ich wiederhole mich noch einmal du kannst nicht (wenn das Script korrekt laufen würde) im oncomplete-Statement sein. Um da zu sein, muss die Zeit falsch sein. Diese wird ja an dein Script übergeben. Aber hey, es ist dein Code, DU musst wissen was er macht, nicht wir
__________________
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
  #48 (permalink)  
Alt 07.04.2015, 18:07
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2010
Beiträge: 177
SpecialFighter befindet sich auf einem aufstrebenden Ast
Standard

so habe euch jetzt mal nen case ohne Datenbankanbindung nachgebaut.
Dort kann man es sehr gut testen:


hier der code der countdown.js
Code:
/*!
 * jQuery Countdown plugin v1.0
 * http://www.littlewebthings.com/projects/countdown/
 *
 * Copyright 2010, Vassilis Dourdounis
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
(function($){

	$.fn.countDown = function (options) {

		config = {};

		$.extend(config, options);

		diffSecs = this.setCountDown(config);
	
		if (config.onComplete)
		{
			$.data($(this)[0], 'callback', config.onComplete);
		}
		if (config.omitWeeks)
		{
			$.data($(this)[0], 'omitWeeks', config.omitWeeks);
		}

		$('#' + $(this).attr('id') + ' .digit').html('<div class="top"></div><div class="bottom"></div>');
		$(this).doCountDown($(this).attr('id'), diffSecs, 500);

		return this;

	};

	$.fn.stopCountDown = function () {
		clearTimeout($.data(this[0], 'timer'));
	};

	$.fn.startCountDown = function () {
		this.doCountDown($(this).attr('id'),$.data(this[0], 'diffSecs'), 500);
	};

	$.fn.setCountDown = function (options) {
		var targetTime = new Date();

		if (options.targetDate)
		{
			targetTime = new Date(options.targetDate.month + '/' + options.targetDate.day + '/' + options.targetDate.year + ' ' + options.targetDate.hour + ':' + options.targetDate.min + ':' + options.targetDate.sec + (options.targetDate.utc ? ' UTC' : ''));
		}
		else if (options.targetOffset)
		{
			targetTime.setFullYear(options.targetOffset.year + targetTime.getFullYear());
			targetTime.setMonth(options.targetOffset.month + targetTime.getMonth());
			targetTime.setDate(options.targetOffset.day + targetTime.getDate());
			targetTime.setHours(options.targetOffset.hour + targetTime.getHours());
			targetTime.setMinutes(options.targetOffset.min + targetTime.getMinutes());
			targetTime.setSeconds(options.targetOffset.sec + targetTime.getSeconds());
		}

		var nowTime = new Date();

		diffSecs = Math.floor((targetTime.valueOf()-nowTime.valueOf())/1000);

		$.data(this[0], 'diffSecs', diffSecs);

		return diffSecs;
	};

	$.fn.doCountDown = function (id, diffSecs, duration) {
		$this = $('#' + id);
		if (diffSecs <= 0)
		{
			diffSecs = 0;
			if ($.data($this[0], 'timer'))
			{
				clearTimeout($.data($this[0], 'timer'));
			}
		}

		secs = diffSecs % 60;
		mins = Math.floor(diffSecs/60)%60;
		hours = Math.floor(diffSecs/60/60)%24;
		if ($.data($this[0], 'omitWeeks') == true)
		{
			days = Math.floor(diffSecs/60/60/24);
			weeks = Math.floor(diffSecs/60/60/24/7);
		}
		else 
		{
			days = Math.floor(diffSecs/60/60/24)%7;
			weeks = Math.floor(diffSecs/60/60/24/7);
		}

		$this.dashChangeTo(id, 'seconds_dash', secs, duration ? duration : 0);
		$this.dashChangeTo(id, 'minutes_dash', mins, duration ? duration : 0);
		$this.dashChangeTo(id, 'hours_dash', hours, duration ? duration : 0);
		$this.dashChangeTo(id, 'days_dash', days, duration ? duration : 0);
		$this.dashChangeTo(id, 'weeks_dash', weeks, duration ? duration : 0);

		$.data($this[0], 'diffSecs', diffSecs);
		if (diffSecs > 0)
		{
			e = $this;
			t = setTimeout(function() { e.doCountDown(id, diffSecs-1) } , 1000);
			$.data(e[0], 'timer', t);
		} 
		else if (cb = $.data($this[0], 'callback')) 
		{
			$.data($this[0], 'callback')();
		}

	};

	$.fn.dashChangeTo = function(id, dash, n, duration) {
		  $this = $('#' + id);
		 
		  for (var i=($this.find('.' + dash + ' .digit').length-1); i>=0; i--)
		  {
				var d = n%10;
				n = (n - d) / 10;
				$this.digitChangeTo('#' + $this.attr('id') + ' .' + dash + ' .digit:eq('+i+')', d, duration);
		  }
	};

	$.fn.digitChangeTo = function (digit, n, duration) {
		if (!duration)
		{
			duration = 0;
		}
		if ($(digit + ' div.top').html() != n + '')
		{
			$(digit + ' div.top').css({'display': 'none'});
			$(digit + ' div.top').html((n ? n : '0')).slideDown(duration);
		}
	};

})(jQuery);

und hier der code der index.php:
PHP-Code:
<?php
header
('Content-Type: text/html; charset=utf-8');
ini_set('session.use_cookies',1);
ini_set('session.use_only_cookies',1);
ini_set('session.use_trans_sid',0);
session_start();        


if (!isset(
$_SESSION['timestamp']))
    {
        
$_SESSION['timestamp'] = 1428417830;
    }


if ( (
time() - $_SESSION['timestamp']) >= 15 )
    {                                                
        
$_SESSION['timestamp'] = time()+15;
    }

                    
$_SESSION['datum'] = date("d.m.Y",$_SESSION['timestamp']);
$datum_array explode("."$_SESSION['datum']);
                
$_SESSION['uhrzeit'] = date("H:i:s",$_SESSION['timestamp']);
$uhrzeit_array explode(":"$_SESSION['uhrzeit']);                    
    
?>

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css" type="text/css">
    <style type="text/css">
        .dash .digit {     float: left;  }
    </style>
</head>

<body class="home page page-id-26 page-template page-template-tmp-no-title-php">
    <div id="countdown_dashboard">
        <div class="dash minutes_dash">
            <div class="digit">0</div>
            <div class="digit">0</div>
        </div>            
        <div style="float: left;">:</div>
        <div class="dash seconds_dash">
            <div class="digit">0</div>
            <div class="digit">0</div>
        </div>
    </div>

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="countdown.js"></script>


<script language="javascript" type="text/javascript">
            
            jQuery(document).ready(function() {
            var day = <? echo $datum_array[0]; ?>;
            var month = <? echo $datum_array[1]; ?>;
            var year = <? echo $datum_array[2]; ?>;
            var hour = <? echo $uhrzeit_array[0]; ?>;
            var min = <? echo $uhrzeit_array[1]; ?>;
            var sec = <? echo $uhrzeit_array[2]; ?>;
            
            
                    jQuery('#countdown_dashboard').countDown({
                                targetDate: {
                                        'day':             day,
                                        'month':     month,
                                        'year':             year,
                                        'hour':         hour,
                                        'min':             min,
                                        'sec':             sec
                                    }, 
                    
                                // onComplete function
                                onComplete: function() { 
                                        alert ('onComplete Funktion!')
                                        jQuery('#countdown_dashboard').stopCountDown();
                                        jQuery('#countdown_dashboard').setCountDown({
                                                    targetDate: {
                                                            'day':             day,
                                                            'month':     month,
                                                            'year':             year,
                                                            'hour':         hour,
                                                            'min':              min,
                                                            'sec':             sec + 15
                                                        }
                                                });                                                            
                                        jQuery('#countdown_dashboard').startCountDown();
                                        sec = sec + 15
                                    }
                                })
                    });
        </script>
    
</body>
</html>

So kann mans testen:
1. Seite aurufen: http://m.it-neuss.de/test/index.php
2. Timer 15 sek laufen lassen
3. Nach Ablauf des Timers, erhaltet ihr einen Alert "Oncomplete Funktion!"
4. Danach läuft der Timer wieder 15 sek.
5. Wenn Ihr jetzt innerhalb dieser 15 sek die Seite neu ladet, kommt immer wieder der o.g. Alert, obwohl der Timer nicht bei 0 sek angekommen ist.

Und genau das ist mein Problem - allerdings weiß ich nicht woran es liegt.
hoffe ihr finden den Fehler
Mit Zitat antworten
  #49 (permalink)  
Alt 07.04.2015, 18:13
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

Kann ich nicht nachvollziehen. Im Firefox 31.6 ESR getestet, der countdown läuft immer normal ab.
Mit Zitat antworten
Sponsored Links
  #50 (permalink)  
Alt 07.04.2015, 18:21
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 06.10.2010
Beiträge: 177
SpecialFighter befindet sich auf einem aufstrebenden Ast
Standard

nutze auch ff.
bei mir läuft es so nicht.

erster countdown von 15 sek => bei 0 sek = alert
zweiter coutdown von 15 sek => währenddessen lade ich die seite manuell neu - dabei kommt jetzt jedes mal die alert Meldung = das darf nicht sein

also ein Bekannter von mir kann dies auch reproduzieren.
Hier Mal ein Video: http://m.it-neuss.de/test/test.mov

Geändert von SpecialFighter (07.04.2015 um 18:55 Uhr)
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

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
Counter auf htmlseiten einbinden PHP-Freak Serveradministration und serverseitige Scripte 17 15.04.2009 23:12
Shtml auf jeder Seite einbinden - counter iVx Serveradministration und serverseitige Scripte 1 13.09.2007 18:31
Counter Despairing Serveradministration und serverseitige Scripte 2 15.08.2006 09:59
Suche einen Besucher Counter mit Reloadsperre Tobias (X)HTML 3 26.01.2006 16:05
Counter mit CSS aufpeppen??? Jollo CSS 3 26.12.2004 21:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:52 Uhr.