php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.04.2011, 17:39  
Neuer Benutzer
 
Registriert seit: 21.04.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Shinophyte befindet sich auf einem aufstrebenden Ast
Standard Ajax, Scrollposition mit onunload() speichern

ein freundliches Hallo an alle

Folgendes Problem ich soll die Scrollposition auf dem Server in eine Datei speichern und dies genau beim schließen der Seite. Dafür würde ich gerne das Javascript Event onunload() nutzen, aber irgendwie scheint er das nicht rechtzeitig zu schaffen. Wenn ich das Event onmouseover() verwende klappt dieses Script problemlos... das dies mit dem Prototyp Framework funktioniert ist mir auch bekannt, ich würde es aber gerne ohne dieses lösen. Ich weiß nur nicht welcher Kniff noch fehlt. Versucht habe ich auch die Zeit des Schließens zu verzögern, aber da ging es nur wenn man mit z.B. alert() dem Nutzer noch eine Warnung anzeigen lässt, dabei schafft er es rechtzeitig.

Client Datei achtens.php
Code:
<html>
	<head>
		<script type='text/javascript'>
			function Scrollmerk() {
				request = getHTTPObject();
				
				request.open("POST","test.php"+'?'+Math.random(),true);
				request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				request.setRequestHeader("Content-length", name.length);
				request.setRequestHeader("Connection", "close");
				var Position = "scroll=" + getScrollY();
				request.send(Position);
			}
			
			function getScrollY() {
				var yachse = 0;
			 
				if( typeof( window.pageYOffset ) == 'number' ) {
					yachse = window.pageYOffset;
				} else if( document.body && document.body.scrollTop ) {
					yachse = document.body.scrollTop;
				} else if( document.documentElement && document.documentElement.scrollTop ) {
					yachse = document.documentElement.scrollTop;
				}
				return yachse;
			}
			
			function getHTTPObject(){
				if (window.ActiveXObject) 
					return new ActiveXObject("Microsoft.XMLHTTP");
				else if (window.XMLHttpRequest) 
					return new XMLHttpRequest();
				else {
					alert("Ihr Browser kann kein Ajax :P");
					return null;
				}
			} 
		</script>
	</head>
	<body onunload="Scrollmerk()" >
	<?php
        for($i = 0; $i< 1000; $i++){
			echo "<a href=\"index.php\" onmouseover=\"Scrollmerk()\">Scroll </a><br>";
        }
	?>
	</body>
</html>
Server Datei test.php
Code:
<?php
$wert = $_POST["scroll"];
if(($stream = @fopen("scroll.txt", "w")) == true){
        fwrite($stream,$wert);
}
?>
Ich bin für jede Hilfe dankbar
Shinophyte ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.04.2011, 19:08  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Probiers doch ma so:

PHP-Code:
if( !window.addEventListener ) {
// ie
  
window.attachEvent'onunload'Scrollmerk );
} else {
  
window.addEventListener'onunload'Scrollmerkfalse );

bin grad total platt und hab so etwas in der Art noch nicht probiert, von dem her kann ich dir nicht sagen, ob dich das schon weiterbringt.

grüße


Basti
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 21.04.2011, 19:40  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Shinophyte Beitrag anzeigen
Folgendes Problem ich soll die Scrollposition auf dem Server in eine Datei speichern und dies genau beim schließen der Seite.
Wozu ist diese Information interessant?

Zitat:
Dafür würde ich gerne das Javascript Event onunload() nutzen, aber irgendwie scheint er das nicht rechtzeitig zu schaffen.
unload bedeutet, der Nutzer verlässt die Seite - das kann bspw. durch Schließen des Browserfensters/-tabs sein, oder durch Navigation zu einer anderen Adresse hin. In dem Moment bekommt der Browser etwas anderes zu tun (Speicher aufräumen, oder neues Dokument anfordern und darstellen). Sich da noch mit zeitaufwendigen Aktionen zwischendrängeln zu wollen (und ein HTTP-Request dauert vergleichsweise ewig), ist meist zum Scheitern verurteilt.

Es gibt je nach Browser noch onbeforeunload - aber auch dieser Event ändert an der grundsätzlichen Problematik wenig.

Zitat:
das dies mit dem Prototyp Framework funktioniert ist mir auch bekannt, ich würde es aber gerne ohne dieses lösen. Ich weiß nur nicht welcher Kniff noch fehlt.
Dann schau dort nach, wie die es machen.

Zitat:
Versucht habe ich auch die Zeit des Schließens zu verzögern, aber da ging es nur wenn man mit z.B. alert() dem Nutzer noch eine Warnung anzeigen lässt, dabei schafft er es rechtzeitig.
Dem Nutzer derart auf den Sack zu gehen, ist eine ganz schlechte Idee.

Wenn das ganze ein Feature zum Nutzen des Besuchers sein soll - dann würde ich es ihn möglichst aktiv auslösen lassen, „zum Speichern der aktuellen Position hier klicken“ o.ä.

Wenn das hingegen nur irgendein Schnüffel-Scheiß werden soll, dann will ich mich daran gar nicht erst beteiligen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 21.04.2011, 20:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bitte niemals auf onUnload verlassen!
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 22.04.2011, 02:59  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.865
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Ich würde eher unmittelbar nach beenden der letzten Scrollaktion speicher. Allerdings hat die ganze sache einen kleinen Haken. Wenn ich da Userbezogene Scrollpositionen irgendwo in die DB kleister, der User später angemeldet irgendwann wiederkommt und eine andere Auflösung benutzt und ich dem Client die Scrollposition mitteile damit er dann dahin "fährt", kann das mitunter einen anderen Effekt haben als ich erwartet habe ( die auflösung z.b. so groß ist das dort kein Scrollen nötig / möglich wäre ).

Ein konkreter Anwendungsbereich wo ich Scrolldaten zur Positionserkennung / Positionswiederbeschaffung nutzen müsste wäre eine Karte ( vorstellbar als Google-Maps ), wobei ich wohl auch selbst da zur Darstellung Divs nutzen würde und zum festlegen der Position Anchor-Sprungpunkte auf die jeweilige Position. ( Zumindest wäre das der theoretisch schnellste und unabhängigste Weg der Positionsspeicherung )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (22.04.2011 um 04:38 Uhr).
tr0y ist offline   Mit Zitat antworten
Alt 22.04.2011, 09:11  
Quu
Benutzer
 
Benutzerbild von Quu
 
Registriert seit: 01.04.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
Quu befindet sich auf einem aufstrebenden Ast
Standard

Ohne dass ich den Thread allzu genau verfolgt hatte, kannst du die Position nicht in nem Cookie speichern?
Dann sollte das Auflösungsproblem zumindest teilweise gelöst sein.
Komplett gelöst werden dürfte es wenn du nicht die Pixel speicherst, sondern alle paar zeilen ein ziel für einen Anker setzt (ich mein die # in einer URL) und mit Javascript diese anspringst
__________________
"Das Unendliche ist weit, vor allem gegen Ende" - Alphonse Allais
Quu ist offline   Mit Zitat antworten
Alt 22.04.2011, 13:34  
Neuer Benutzer
 
Registriert seit: 21.04.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Shinophyte befindet sich auf einem aufstrebenden Ast
Standard

danke für die vielen Antworten

Erstmal ChrisB geh mich doch bitte nicht so an Ich möchte keinem irgendwie hinterher schnüffeln. Das Ganze hier ist für einen Beleg, den ich machen muss dabei sollen wir einen ebookreader schreiben und dieser ist nur für einen persönlich gedacht, also hat somit keinen Login und auch keine Datenbank drunter. Ich soll von jedem Buch das gelesen wurde beim schließen (ohne extra Button) den aktuellen Stand speichern und wenn man dies wieder aufruft (egal wo man ist und welcher Rechner genutzt wird, somit fallen Cookies schon mal raus) soll zur letzten Scrollposition gesprungen werden. Uns wurde auch gesagt das wir es mit Ajax realisieren können. Ein Javascript Event wie onscroll() wäre cool, aber weiß nicht ob es das gibt, muss ich mal schauen ^^ Das alert() von mir war nur um zu testen in wie weit das überhaupt funktioniert.
Shinophyte ist offline   Mit Zitat antworten
Alt 22.04.2011, 14:07  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Shinophyte Beitrag anzeigen
Erstmal ChrisB geh mich doch bitte nicht so an Ich möchte keinem irgendwie hinterher schnüffeln.
Wenn du von Anfang an ein paar Worte zum Sinn und Zweck des ganzen verlierst, gibt es keine Missverständnisse.

Zitat:
Ein Javascript Event wie onscroll() wäre cool, aber weiß nicht ob es das gibt
Klar, den gibt's. IdR. bindet man den an window.
Bei dessen Verwendung solltest du aber beachten, dass er relativ oft feuert, teilweise auch während des Scrollens. Um also nicht Client und Server mit jeder Menge im Millisekundentakt abgefeuerter AJAX-Requests lahm zu legen, würde es sich dann anbieten, beim Feuern dieses Events erst mal einen kleinen Timeout zu setzen, um den Request zeitverzögert auszulösen. Tritt der Event gleich darauf erneut auf, löscht er den vorherigen Timeout, und setzt einen neuen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.04.2011, 15:38  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Siehe auch http://plugins.jquery.com/plugin-tags/debounce
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 24.04.2011, 04:25  
Erfahrener Benutzer
 
Registriert seit: 04.08.2010
Beiträge: 287
PHP-Kenntnisse:
Fortgeschritten
zwutz wird schon bald berühmt werden
Standard

Zitat:
Zitat von Shinophyte Beitrag anzeigen
(egal wo man ist und welcher Rechner genutzt wird [...])
das wird nicht funktionieren. Wie tr0y sagte, wirst du ein Problem bekommen, wenn sich die Auflösung änderst. Der User muss nur sein Fenster kleiner machen, und schon sorgt dein Feature für mehr Verwirrung als Nutzen
zwutz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fileupload via AJAX GSJLink HTML, Usability und Barrierefreiheit 13 17.05.2012 21:41
PHP Classen via Ajax instanzieren shredding PHP Einsteiger 12 20.04.2011 17:42
HTML Tabelle Werte ändern -> direkt mit AJAX speichern Atikos JavaScript, Ajax und mehr 3 31.12.2010 01:15
Canvas als Bild speichern - AJAX an PHP, Bild aber korrupt... Fuchur84 PHP-Fortgeschrittene 1 26.09.2010 14:38
[Erledigt] Web-Präsentation mit AJAX bbskater JavaScript, Ajax und mehr 3 24.09.2010 15:11
Informationen bei Verlassen der Seite speichern Multivac JavaScript, Ajax und mehr 3 16.04.2010 18:25
[Erledigt] jQuery Ajax .post - Datensätze in mySQL speichern ThomasM JavaScript, Ajax und mehr 1 29.03.2010 07:31
[Erledigt] mit AJAX Daten speichern klappt nicht (TYP falsch?) MueThoS JavaScript, Ajax und mehr 5 16.03.2010 06:06
Ajax Anwendung, reines Ajax oder Ajax und Html jackie1983 JavaScript, Ajax und mehr 5 09.02.2010 16:50
AJAX - Variable von PhP erhalten auf möglichst simple Weise? SplitterWind JavaScript, Ajax und mehr 10 10.01.2010 04:34
1111: AJAX meets PHP (indirectly) Nikolaus 2.0 Adventskalender 2008 5 15.12.2008 11:00
Probleme mit Sonderzeichen bei Ajax (prototype)... go1denboy JavaScript, Ajax und mehr 1 31.08.2008 18:44
AJAX Loginformular Eingaben speichern cycap JavaScript, Ajax und mehr 6 14.08.2008 04:56
AJAX: Session-Inhalt an PHP Curanai HTML, Usability und Barrierefreiheit 2 05.11.2007 15:45
Formular in Mysql Datenbank speichern Anuschka Datenbanken 1 15.08.2004 02:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
scroll position merken, ajax position speichern, onunload in datei schreiben, ajax scroll merken, onunload, scrollposition speichern, html position scrollbalken, scroll position speichern, ajax scroll position übernehmen, onscroll ajax, ajax scrollpos merken auf server speichern, scrollbar position, php position scrollbar speichern, jquery ajax daten speichern bei unload, position der scrollbar beim speichern übernehmen, scroll position nicht ändern beim anklicken, onunload funktioniert nicht, window.pageyoffset() position merken, scrollfenster php javascript, scroll position nach submit an gleiche position

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum