Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4784 > unrolled thread

Gluecksrad

Started byKlaus Ketelaer <spam@spambouncer.de>
First post2016-11-11 17:19 +0100
Last post2016-11-23 16:21 +0100
Articles 20 on this page of 50 — 5 participants

Back to article view | Back to de.comp.lang.javascript


Contents

  Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-11 17:19 +0100
    Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-11 19:52 +0100
      Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-12 12:24 +0100
        Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-13 20:49 +0100
    Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-14 01:52 +0100
      Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-14 02:25 +0100
        Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-14 10:19 +0100
          Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-14 10:57 +0100
            Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-15 08:38 +0100
          Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-15 00:41 +0100
    Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-15 17:21 +0100
      Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-15 19:27 +0100
        Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-16 12:13 +0100
          Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-16 12:37 +0100
          Re: Gluecksrad "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-11-16 12:58 +0100
          Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-16 16:19 +0100
            Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-16 18:29 +0100
              Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-16 19:13 +0100
                Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-16 19:29 +0100
                  Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-17 20:21 +0100
                    Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-18 03:09 +0100
                      Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-18 17:23 +0100
                        Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-18 17:40 +0100
                          Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-18 17:56 +0100
                            Re: Gluecksrad "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-11-18 18:19 +0100
                              Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-18 19:14 +0100
                                Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-18 20:06 +0100
                                  Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-19 10:04 +0100
                            Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-18 19:06 +0100
                              Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-18 20:16 +0100
                                Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-19 10:22 +0100
                        Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-18 21:45 +0100
                          Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-19 10:38 +0100
                            Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-19 10:56 +0100
                              Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-19 11:48 +0100
            Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-22 21:19 +0100
              Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-22 22:13 +0100
                Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-23 01:08 +0100
                  Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-23 01:21 +0100
                  Re: Gluecksrad "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2016-11-23 22:47 +0100
              Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-23 10:06 +0100
                Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-23 10:18 +0100
                  Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-23 12:16 +0100
                    Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-24 21:28 +0100
                      Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-24 22:45 +0100
                        Re: Gluecksrad Arno Welzel <usenet@arnowelzel.de> - 2016-11-25 23:11 +0100
                  Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-23 16:41 +0100
                    Re: Gluecksrad Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-23 21:15 +0100
                Re: Gluecksrad Klaus Ketelaer <spam@spambouncer.de> - 2016-11-23 15:41 +0100
                  Re: Gluecksrad "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-11-23 16:21 +0100

Page 1 of 3  [1] 2 3  Next page →


#4784 — Gluecksrad

FromKlaus Ketelaer <spam@spambouncer.de>
Date2016-11-11 17:19 +0100
SubjectGluecksrad
Message-ID<o04r2k$i78$1@news.albasani.net>
Hallo zusammen,

ich bin, was JavaScipt, Ajax, etc. betrifft so ziemlich
frei von jedem Wissen.

Dummerweise muss ich ich kurzfristig so etwas wie ein
Glücksrad erstellen, also eine "rotierende Torte", die
langsam ausläuft und bei einem Stück der Torte stehen
bleibt.

So wie ich das sehe, kann ich dabei meine gewohnten
Werkzeuge Perl, Php, Html, CSS, ... weitestgehend
vergessen.

Was ich bisher mittels Googel gefunden habe, das bekomme
ich irgendwie nicht ans laufen.

Hat zufällig jemand einen Link zu einem funktionierenden
Beispielcode, den man auch als Nicht-JavaScript-Coder
halbwegs nachvollziehen kann?

Dank und Gruß

Klaus

[toc] | [next] | [standalone]


#4785

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-11 19:52 +0100
Message-ID<1690911.6tgchFWduM@PointedEars.de>
In reply to#4784
Klaus Ketelaer wrote:

> [Glücksrad bauen]
> Was ich bisher mittels Googel gefunden habe, das bekomme
> ich irgendwie nicht ans laufen.
> 
> Hat zufällig jemand einen Link zu einem funktionierenden
> Beispielcode, den man auch als Nicht-JavaScript-Coder
> halbwegs nachvollziehen kann?

<http://www.tty1.net/smart-questions_de.html>

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4786

FromKlaus Ketelaer <spam@spambouncer.de>
Date2016-11-12 12:24 +0100
Message-ID<o06u55$od3$1@news.albasani.net>
In reply to#4785
Am 11.11.2016 um 19:52 schrieb Thomas 'PointedEars' Lahn:
> Klaus Ketelaer wrote:
>
[...]

Vielen Dank für deine schnelle Hilfe.

Dank Deiner kompetenten Ratschläge konnte
ich das Problem schnell lösen und habe nun
ein funktionierendes Glücksrad.

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4787

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-13 20:49 +0100
Message-ID<1856226.c6QxNhiMyJ@PointedEars.de>
In reply to#4786
Klaus Ketelaer wrote:

> Vielen Dank für deine schnelle Hilfe.

Gern geschehen.
 
> Dank Deiner kompetenten Ratschläge konnte
> ich das Problem schnell lösen und habe nun
> ein funktionierendes Glücksrad.

Super.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4788

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-14 01:52 +0100
Message-ID<223b4b7c-cb54-a61c-0f4e-f6b052823756@arnowelzel.de>
In reply to#4784
Klaus Ketelaer schrieb:

> ich bin, was JavaScipt, Ajax, etc. betrifft so ziemlich
> frei von jedem Wissen.
> 
> Dummerweise muss ich ich kurzfristig so etwas wie ein
> Glücksrad erstellen, also eine "rotierende Torte", die
> langsam ausläuft und bei einem Stück der Torte stehen
> bleibt.

Was heisst "muss ich"? Wenn Du es nicht selber kannst, dann wirst Du
wohl jemanden beauftragen müssen, das umzusetzen. Kostenlos aber wohl
eher nicht.

> Hat zufällig jemand einen Link zu einem funktionierenden
> Beispielcode, den man auch als Nicht-JavaScript-Coder
> halbwegs nachvollziehen kann?

Fertige "Glücksrad-Animation"? Nö, ist mir nichts bekannt. Ich würde
halt mit CSS-Manipulation anfangen - also eine Bitmap von einem
Glücksrad nehmen und diese mit der CSS-Eigenschaft transform:rotate
drehen lassen.


-- 
Arno Welzel
https://arnowelzel.de
http://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


#4789

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-14 02:25 +0100
Message-ID<1786793.oMNUckLgyt@PointedEars.de>
In reply to#4788
Arno Welzel wrote:

> Fertige "Glücksrad-Animation"? Nö, ist mir nichts bekannt. Ich würde
> halt mit CSS-Manipulation anfangen - also eine Bitmap von einem
> Glücksrad nehmen und diese mit der CSS-Eigenschaft transform:rotate
> drehen lassen.

JFTR: Die CSS-Eigenschaft heisst “transform”.  rotate() ist eine CSS-
Funktion, deren Aufruf als Wert dieser Eigenschaft angegeben werden kann.

Die Animation sollte man auch mit CSS realisieren (animation-Eigenschaft); 
starten kann man sie dann mit clientseitigem Scripting.

Besser als mit einer Bitmap-Grafik wird es aber mit Scalable *Vector* 
Graphics (SVG) aussehen.  Das wäre auch barriereärmer.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4790

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-14 10:19 +0100
Message-ID<aa1d1b82-43d3-6207-7628-3c29ae053ea2@arnowelzel.de>
In reply to#4789
Thomas 'PointedEars' Lahn schrieb:

> Arno Welzel wrote:
> 
>> Fertige "Glücksrad-Animation"? Nö, ist mir nichts bekannt. Ich würde
>> halt mit CSS-Manipulation anfangen - also eine Bitmap von einem
>> Glücksrad nehmen und diese mit der CSS-Eigenschaft transform:rotate
>> drehen lassen.
> 
> JFTR: Die CSS-Eigenschaft heisst “transform”.  rotate() ist eine CSS-
> Funktion, deren Aufruf als Wert dieser Eigenschaft angegeben werden kann.
> 
> Die Animation sollte man auch mit CSS realisieren (animation-Eigenschaft); 
> starten kann man sie dann mit clientseitigem Scripting.
> 
> Besser als mit einer Bitmap-Grafik wird es aber mit Scalable *Vector* 
> Graphics (SVG) aussehen.  Das wäre auch barriereärmer.

Danke für die Ergänzung. Aber wieso? Ich dachte, der Fragesteller soll
Dir erstmal eine richtige Frage formulieren?


-- 
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


#4791

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-14 10:57 +0100
Message-ID<4266228.31r3eYUQgx@PointedEars.de>
In reply to#4790
Arno Welzel wrote:

> Danke für die Ergänzung.

Es war auch eine Korrektur.

> Aber wieso?

Weshalb nicht?

> Ich dachte, der Fragesteller soll Dir erstmal eine richtige Frage
> formulieren?

Ich weiss nicht, was Du dachtest.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4793

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-15 08:38 +0100
Message-ID<35a0a5ff-bd7c-c870-0ace-ada19f850c6b@arnowelzel.de>
In reply to#4791
Thomas 'PointedEars' Lahn schrieb:

> Arno Welzel wrote:
> 
>> Danke für die Ergänzung.
> 
> Es war auch eine Korrektur.

Ja, im Sinne von Rosinenausscheidung, dass bei einer Angabe wie

.myclass {
  transform:rotate(30deg);
}

nur "transform" die Eigenschaft ist und der Teil ab "rotate" eine
Funktion ist, auch wenn man es trotzdem genau so wie oben gezeigt, benutzt.

>> Aber wieso?
> 
> Weshalb nicht?
> 
>> Ich dachte, der Fragesteller soll Dir erstmal eine richtige Frage
>> formulieren?
> 
> Ich weiss nicht, was Du dachtest.

Deswegen schreibe ich es, damit Du es weißt. Und was sollte dann der
Verweis auf <http://www.tty1.net/smart-questions_de.html>?




-- 
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


#4792

FromKlaus Ketelaer <spam@spambouncer.de>
Date2016-11-15 00:41 +0100
Message-ID<o0di2g$i0v$1@news.albasani.net>
In reply to#4790
Am 14.11.2016 um 10:19 schrieb Arno Welzel:
> Thomas 'PointedEars' Lahn schrieb:
>
>> Arno Welzel wrote:
>>
>
> Danke für die Ergänzung. Aber wieso? Ich dachte, der Fragesteller soll
> Dir erstmal eine richtige Frage formulieren?
>
Muss ich mich jetzt schämen, weil ich keine
Fragen mehr habe?

SCNR

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4794

FromKlaus Ketelaer <spam@spambouncer.de>
Date2016-11-15 17:21 +0100
Message-ID<o0fcmj$hji$1@news.albasani.net>
In reply to#4784
Hallo zusammen,

ich sende aus meinem Glücksrad heraus Daten an ein PHP-Script,
das die Daten dann speichert.

   var request = new XMLHttpRequest();
   var myUrl = wheel.url + '/save.php'
                         + '?ip=' + wheel.ip
                         + '&clicks=1'
                         + '&type=' + wheel.seg_type;
   request.open('get', myUrl, false);
   request.send();

   Nun muss ich die aktualisierte Daten wieder zurücklesen.

Irgendwie kapiere ich den umgekehrten Weg nicht.

Damit es auch der Thomas versteht(SCNR):
Ich muss Daten aus einem PHP Script heraus an eine laufende
JavaScript Anwendung schicken.

Das Script kann nicht neu gestartet werden! Die Seite kann
nicht refresht(F5) werden!

Wer hat denn mal ein verständliches Beispiel für mich.

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4795

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-15 19:27 +0100
Message-ID<3307965.kQq0lBPeGt@PointedEars.de>
In reply to#4794
Klaus Ketelaer wrote:

> ich sende aus meinem Glücksrad heraus Daten an ein PHP-Script,
> das die Daten dann speichert.
> 
>    var request = new XMLHttpRequest();
>    var myUrl = wheel.url + '/save.php'
>                          + '?ip=' + wheel.ip
>                          + '&clicks=1'
>                          + '&type=' + wheel.seg_type;

Sicherer wäre es, die Werte im query-part mit encodeURIComponent() zu 
prozent-codieren.

Was ist “wheel.ip”?

>    request.open('get', myUrl, false);

Das solltest Du nicht tun.  Wenn das dritte Argument von 
XMLHTTPRequest::open() “false” ist, dann wird der Request synchron 
behandelt, das heisst das Script blockiert den Browser oder zumindest das 
Browser-Fenster/-Tab solange, bis der Server antwortet oder ein Timeout 
eintritt.

Diese Form des Requests ist nicht nur benutzerunfreundlich, sie wird auch 
gemäss Browserherstellern zukünftig nicht mehr unterstützt werden.

Richtig ist stattdessen:

  request.open("GET", myUrl, true);

Normalerweise will man ausserdem wissen, ob der Request erfolgreich war und 
was der Server geantwortet hat, würde deshalb nach diesem Aufruf einen 
Event-Listener registrieren.  Entweder

  request.onload = function (event) {
    // Zugriff auf event.target.status und event.target.response*
  };

  request.onerror = function (event) {
    // Zugriff auf event.target.status und event.target.response*
  };

oder, für den Fall, dass das noch nicht unterstützt wird,

  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (/\b(?:2\d\d|1023|0)\b/.test(request.status))
      {
        /* Zugriff auf request.response*
      }
      else
      {
        /* Zugriff auf request.response*
      }
    }
  };

<https://xhr.spec.whatwg.org/>

Oder man benutzt eine Bibliothek wie mein JSX:http.js, die dies kapselt.

>    request.send();

Formal richtig ist:

  request.send(null);
 
Das erste (und einzige) Argument von XHR::send() gibt an, welche Daten im 
“message body” an den Server gesendet werden sollen (das braucht man vor 
allem für POST-Requests).  Nur wenn dieses “null” ist, bleibt der “message 
body” per Spezifikation und Implementierung leer.

>    Nun muss ich die aktualisierte Daten wieder zurücklesen.
> 
> Irgendwie kapiere ich den umgekehrten Weg nicht.

Siehe oben.
 
> Damit es auch der Thomas versteht(SCNR):
> Ich muss Daten aus einem PHP Script heraus an eine laufende
> JavaScript Anwendung schicken.

  <?= $daten ?>
 
> Das Script kann nicht neu gestartet werden! Die Seite kann
> nicht refresht(F5) werden!

Du meinst wohl “_darf_ nicht”.
 
> Wer hat denn mal ein verständliches Beispiel für mich.

Schade, Du hast – trotz Anleitung – immer noch nicht gelernt, wie man Fragen 
richtig stellt.

Dann bleibt Dir wohl nur Freund Google.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4796

FromKlaus Ketelaer <spam@spambouncer.de>
Date2016-11-16 12:13 +0100
Message-ID<o0hf12$p81$1@news.albasani.net>
In reply to#4795
Am 15.11.2016 um 19:27 schrieb Thomas 'PointedEars' Lahn:
> Klaus Ketelaer wrote:
>
> Sicherer wäre es, die Werte im query-part mit encodeURIComponent() zu
> prozent-codieren.
Ja, das stimmt schon, aber das ist mir im Moment zu unleserlich
beim debuggen. Zudem wird eh immer nur sowas wie

http://winner.test/save.php?ip=192.168.0.10&clicks=1&type=1

übergeben, wo eigentlich nichts passieren kann.

>
> Was ist “wheel.ip”?
>
Eine IP-Adresse

>>    request.open('get', myUrl, false);
>
> Das solltest Du nicht tun.  Wenn das dritte Argument von
> XMLHTTPRequest::open() “false” ist, dann wird der Request synchron
> behandelt, das heisst das Script blockiert den Browser oder zumindest das
> Browser-Fenster/-Tab solange, bis der Server antwortet oder ein Timeout
> eintritt.

Ich hatte ganz bewusst false eingetragen, weil ich eine synchrone
Verarbeitung wollte.
Normalerweise würde ich nach der Verarbeitung die aktuellen Werte
aus der DB zurücklesen, und erst dann weiter arbeiten.
(Leider bin ich zu blöd, richtig zu fragen, wie Letzteres geht.)

>
> Diese Form des Requests ist nicht nur benutzerunfreundlich, sie wird auch
> gemäss Browserherstellern zukünftig nicht mehr unterstützt werden.
>
> Richtig ist stattdessen:
>
>   request.open("GET", myUrl, true);
>
Nach meinen Erfordernissen eher nicht. Ich habe das aber trotzdem erst
mal geändert.


> Normalerweise will man ausserdem wissen, ob der Request erfolgreich war und
> was der Server geantwortet hat, würde deshalb nach diesem Aufruf einen
> Event-Listener registrieren.  Entweder
>
>   request.onload = function (event) {
>     // Zugriff auf event.target.status und event.target.response*
>   };
>
>   request.onerror = function (event) {
>     // Zugriff auf event.target.status und event.target.response*
>   };
>
> oder, für den Fall, dass das noch nicht unterstützt wird,
>
>   request.onreadystatechange = function () {
>     if (request.readyState == 4) {
>       if (/\b(?:2\d\d|1023|0)\b/.test(request.status))
>       {
>         /* Zugriff auf request.response*
>       }
>       else
>       {
>         /* Zugriff auf request.response*
>       }
>     }
>   };

In Opera, Chrome und Firefox funktioniert alles wunderbar.

Weil es in diesem scheiss IE11 natürlich wieder nicht funktioniert,
habe ich Deine Tipps prompt eingebaut. onreadystatechange hatte ich
bereits implementiert, aber leider nicht verstanden. Der readyState
ist irgendwie immer 4.

Zudem:
Was hilt es mir, wenn der Request in die Hose geht, aber nirgendwo
etwas auszulesen ist? Es wird kein Fehler ausgelöst, und alles was
ich an Fehlermeldungen auslesen kann sind leere Strings.
Gelegentlich gibt es mal einen Fehler 404 (nur im IE), der aber nur
Blödsinn sein kann.

Wenn ich den IE11 starte und die Anwendung ausführe, dann funktioniert
sie 2-3 mal und danach passiert nichts mehr.


>
> <https://xhr.spec.whatwg.org/>
>
Danke

> Oder man benutzt eine Bibliothek wie mein JSX:http.js, die dies kapselt.
>

Mir wäre es egal, was ich benutze, solange es funktioniert und leicht
verständlich ist.

>>    request.send();
>
> Formal richtig ist:
>
>   request.send(null);
>

Ja, das hatte ich zwischenzeitlich eingebaut.

Dank und Gruß

Klaus

[toc] | [prev] | [next] | [standalone]


#4797

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-16 12:37 +0100
Message-ID<1629038.atdPhlSkOF@PointedEars.de>
In reply to#4796
Klaus Ketelaer wrote:

> Am 15.11.2016 um 19:27 schrieb Thomas 'PointedEars' Lahn:
>> Sicherer wäre es, die Werte im query-part mit encodeURIComponent() zu
>> prozent-codieren.
> Ja, das stimmt schon, aber das ist mir im Moment zu unleserlich
> beim debuggen. Zudem wird eh immer nur sowas wie
> 
> http://winner.test/save.php?ip=192.168.0.10&clicks=1&type=1
> 
> übergeben, wo eigentlich nichts passieren kann.

<https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.235_-_URL_Escape_Before_Inserting_Untrusted_Data_into_HTML_URL_Parameter_Values>

>> Was ist “wheel.ip”?
>>
> Eine IP-Adresse

Weshalb?

> Normalerweise würde ich nach der Verarbeitung die aktuellen Werte
> aus der DB zurücklesen, und erst dann weiter arbeiten.
> (Leider bin ich zu blöd, richtig zu fragen, wie Letzteres geht.)

Tragisch.

>> Normalerweise will man ausserdem wissen, ob der Request erfolgreich war
>> und was der Server geantwortet hat, würde deshalb nach diesem Aufruf
>> einen Event-Listener registrieren.  […]
> 
> In Opera, Chrome und Firefox funktioniert alles wunderbar.
> 
> Weil es in diesem scheiss IE11 natürlich wieder nicht funktioniert,

Gemäss <http://caniuse.com/#search=xmlhttprequest> funktionieren “onload” 
und “onerror” ab IE 11.

> habe ich Deine Tipps prompt eingebaut. onreadystatechange hatte ich
> bereits implementiert, aber leider nicht verstanden. Der readyState
> ist irgendwie immer 4.

Zum Schluss ist er das (4 = “FINISHED”).  Deshalb muss man dann noch den 
Status und die Response-Message abfragen.

AISB: Man darf aber nur Listener für *entweder* onload/onerror *oder* 
onreadystatechange registrieren (was sich eignet, findet man mit “typeof” 
heraus).  Oder wenn man alles registriert, muss man sicherstellen, dass der 
Erfolgs-/Fehlerfall nur einmal behandelt wird.

> Zudem:
> Was hilt es mir, wenn der Request in die Hose geht, aber nirgendwo
> etwas auszulesen ist?

Wenn der Request nicht erfolgreich ist, siehst Du das am readyState, am 
Status und an der Response; …

> Es wird kein Fehler ausgelöst, und alles was
> ich an Fehlermeldungen auslesen kann sind leere Strings.

… für die letzteren beiden bist *Du* verantwortlich, denn *Du* hast die 
Kontrolle über den serverseitigen (PHP-)Code, oder?

> Gelegentlich gibt es mal einen Fehler 404 (nur im IE), der aber nur
> Blödsinn sein kann.

Wie kommst Du darauf?

> Wenn ich den IE11 starte und die Anwendung ausführe, dann funktioniert
> sie 2-3 mal und danach passiert nichts mehr.

Dann machst Du was fhcsal.  Von allen IE-Versionen ist der IE 11 der am 
wenigsten kaputte.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4798

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2016-11-16 12:58 +0100
Message-ID<o0hhl1$5dj$1@solani.org>
In reply to#4796
On 16.11.2016 at 12:13, Klaus Ketelaer wrote:

> Ich hatte ganz bewusst false eingetragen, weil ich eine synchrone
> Verarbeitung wollte.

Du vielleicht, aber auch die User? Die ärgern sich nämlich, wenn der
Browser einfriert, weil ein Request mal lange dauert.

> Normalerweise würde ich nach der Verarbeitung die aktuellen Werte
> aus der DB zurücklesen, und erst dann weiter arbeiten.
> (Leider bin ich zu blöd, richtig zu fragen, wie Letzteres geht.)

Im Prinzip kannst Du folgendes machen:

  * XHR vorbereiten (inklusive aufsetzen des readystatechange Listeners)
  * den asynchronen XHR abschicken
  * sofort Feedback geben, dass im Hintergrund etwas verarbeitet
    wird, z.B. durch Anzeige eines Spinners

In der Zwischenzeit kann der Anwender im Browser weitermachen. Auf der
Serverseite behandelst Du den Request, und antwortest dann mit den
nötigen Daten (z.B. als JSON); diese können auch einen Fehler
signalisieren (und eine passende Fehlermeldung enthalten).  Kommt die
Antwort beim Client an, dann wird automatisch der readystatechange
Listener aufgerufen. Dort dann etwa:

  * prüfen auf readyState == 4 (alles andere ignorieren)
  * das Feedback, dass etwas verarbeitet wird, wieder zurück nehmen
  * prüfen auf status
    * falls okay (100 etc.): die empfangenen Daten verarbeiten (für
      JSON siehe JSON.parse()[1]), und anzeigen
    * andernfalls: Fehler melden

[1]
<https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse>

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4799

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-16 16:19 +0100
Message-ID<1a76ea3d-6da6-d368-78b5-3073fe844d07@arnowelzel.de>
In reply to#4796
Klaus Ketelaer schrieb:

[XHR]
> In Opera, Chrome und Firefox funktioniert alles wunderbar.
> 
> Weil es in diesem scheiss IE11 natürlich wieder nicht funktioniert,
> habe ich Deine Tipps prompt eingebaut. onreadystatechange hatte ich
> bereits implementiert, aber leider nicht verstanden. Der readyState
> ist irgendwie immer 4.

Vielleicht hilft Dir diese real funktionierende Seite (ja, die geht auch
im IE 11) als Anregung:

<https://arnowelzel.de/wp/tools/teamspeak-serverstatus>

Im Quelltext ab Zeile 146.



-- 
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


#4800

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-16 18:29 +0100
Message-ID<10725728.O9o76ZdvQC@PointedEars.de>
In reply to#4799
Arno Welzel wrote:

> <https://arnowelzel.de/wp/tools/teamspeak-serverstatus>
> 
> Im Quelltext ab Zeile 146.

| <script type="text/javascript">
| /* <![CDATA[ */

Die zweite Zeile ist für XHTML sinnvoll, und dann auch nur nötig, wenn das 
XHTML-Dokument mit einem XML-Medientyp ausgeliefert wird (was den XML-Parser 
triggert) *und* der Inhalt des Elements Markup-Begrenzer wie “<” enthält; in 
HTML5 ohne XHTML-Syntax (siehe Dein doctype und Dein “html”-Element) ist sie 
unnötiger Unfug.

| function doUpdate() {

Die benutzerdefinierte Funktion sollte in einem eigenen Namespace definiert 
werden, um Namenskollisionen zu vermeiden.  Die einfachste Möglichkeit dafür 
ist die Definition in einer unmittelbar aufgerufenen anonymen Funktion:

  (function () {
    function doUpdate ()
    {
      // …
    }

    …doUpdate…
  }());

| 	try {
| 		req=new XMLHttpRequest();
| 	}
| 	catch(ms) {
| 		try {
| 			req=new ActiveXObject("Msxml2.XMLHTTP");
| 		}
| 		catch(nonms) {
| 			try {
| 				req=new 
ActiveXObject("Microsoft.XMLHTTP");
| 			}
| 			catch (failed) {
| 				req = null;
| 			}
| 		}
| 	}
| 

Es ist nicht sinnvoll, das XHR-Objekt für jeden Request neu zu erstellen;
es wird bei open() automatisch zurückgesetzt.

Deine Benennung der Exception-Variablen ist unüblich.

Auf MSXML2 zu testen ist in dieser massgeschneiderten Funktion unnötig, da 
Du keine der zusätzlichen Features verwendest.

| 	if(req != null) {
| 		req.open("GET", "/tools/tss3/status.php?lang=de", true);
| 		
| 		req.onreadystatechange = function() {
| 			switch(req.readyState) {
| 			case 4:
| 				if(req.status==200)
| 				{
| 					
document.getElementById("stats").innerHTML = req.responseText;
| 				}
| 				setTimeout("doUpdate()", 5000);
| 				break;
| 
| 			default:
| 				return false;
| 				break;     
| 			}
| 		};
| 
| 		req.setRequestHeader("Content-Type","application/x-www-
form-urlencoded");
| 		req.send(null);
| 	}

Die switch-Anweisung ist fehlerträchtig (“switch-case fall-through”) und 
hier unnötig bis falsch.


Es sollte

  var timeout;
  // …
    timeout = window.setTimeout(doUpdate, 5000);

heissen:

<https://developer.mozilla.org/de/docs/Web/API/WindowTimers/setTimeout#Passing_string_literals>
<https://de.wikipedia.org/wiki/Content_Security_Policy#Verbotene_Konstrukte_und_Alternativen>

window.clearTimeout(timeout) sollte dann onunload aufgerufen werden.


Der Aufruf von XHR::setRequestHeader() ist *so* (ungetestet) fehlerträchtig 
und hier unnötig.

| ( function( $ ) {
| 	$(document).ready(function () {
| 		setTimeout("doUpdate()", 5000);
| 	});
| } )( jQuery );

Wenn Du jQuery verwendest (was hier unnötig erscheint), solltest Du auch 
jQuery.ajax() verwenden statt einer eigenen Lösung:

<http://api.jquery.com/jQuery.ajax/>


*Nur* jQuery(document).ready(…) in einer anonymen Funktion aufzurufen ist 
unnötig fehlerträchtig.


Empfohlen wird, statt jQuery(document).ready(function () { … }) einfach 
jQuery(function () { … }) aufzurufen:

<http://api.jquery.com/ready/>

| /* ]]> */

Unfug, siehe oben.

| </script>

Das script-Element sollte sich im head-Element befinden, nicht innerhalb 
eines div-Elements innerhalb eines article-Elements.  Optimal werden 
gemeinsam genutzte Teile per URI referenziert, wobei die referenzierte 
Ressource minimiert ausgeliefert werden kann.  Das async- und das defer-
Attribut können dann benutzt werden, um das Script erst dann zu laden,
wenn es benötigt wird.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4801

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-16 19:13 +0100
Message-ID<e803739f-9e3e-96e0-cb70-0209232585e8@arnowelzel.de>
In reply to#4800
Thomas 'PointedEars' Lahn schrieb:

> Arno Welzel wrote:
> 
>> <https://arnowelzel.de/wp/tools/teamspeak-serverstatus>
>>
>> Im Quelltext ab Zeile 146.
> 
> | <script type="text/javascript">
> | /* <![CDATA[ */
> 
> Die zweite Zeile ist für XHTML sinnvoll, und dann auch nur nötig, wenn das 
> XHTML-Dokument mit einem XML-Medientyp ausgeliefert wird (was den XML-Parser 
> triggert) *und* der Inhalt des Elements Markup-Begrenzer wie “<” enthält; in 
> HTML5 ohne XHTML-Syntax (siehe Dein doctype und Dein “html”-Element) ist sie 
> unnötiger Unfug.

Das Script ist schon *sehr* alt und solche Sachen übersieht man dabei
gerne mal.

ZU den übrigen Punkten: Danke für deine Anmerkungen. Ich werde trotzdem
nichts mehr daran ändern, weil das Ding schlicht und ergreifend in allen
aktuellen Browsern funktioniert, unabhängig davon, ob es formal in allen
Details absolut perfekt umgesetzt ist.


-- 
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


#4802

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-16 19:29 +0100
Message-ID<4986933.DvuYhMxLoT@PointedEars.de>
In reply to#4801
Arno Welzel wrote:

> […] Danke für deine Anmerkungen. Ich werde trotzdem nichts mehr daran
> ändern, weil das Ding schlicht und ergreifend in allen aktuellen Browsern
> funktioniert,

Reiner Zufall.

> unabhängig davon, ob es formal in allen Details absolut perfekt umgesetzt
> ist.

Dein Script hat neben Performance- und Sicherheits-Problemen auch logische 
Fehler, die ich erwähnt habe.  Zum Beispiel gibt es einen Scriptfehler, wenn 
Navigation und Update zusammenfallen, weil Du onunload nicht 
window.clearTimeout(…) aufrufst.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4803

FromArno Welzel <usenet@arnowelzel.de>
Date2016-11-17 20:21 +0100
Message-ID<a596fa85-d687-0419-8821-1ba99d147e99@arnowelzel.de>
In reply to#4802
Thomas 'PointedEars' Lahn schrieb:

> Arno Welzel wrote:
> 
>> […] Danke für deine Anmerkungen. Ich werde trotzdem nichts mehr daran
>> ändern, weil das Ding schlicht und ergreifend in allen aktuellen Browsern
>> funktioniert,
> 
> Reiner Zufall.

Da habe ich ja großes Glück, dass es in all den Jahren nie Probleme gab
und sich nie jemand gemeldet hat, das bei ihm das Script nicht funktioniert.

>> unabhängig davon, ob es formal in allen Details absolut perfekt umgesetzt
>> ist.
> 
> Dein Script hat neben Performance- und Sicherheits-Problemen auch logische 

Die theoretischen Sicherheitsprobleme sind in diesem konkreten Fall
irrelevant. Und Performanceprobleme erkenne in der *Praxis* ich keine,
selbst wenn die Performanceunterschiede verschiedener Umsetzungen
theoretisch messbar sein mögen.

Deine Anmerkung zu switch() ist auch eher theoretischer Natur für
Entwickler, die die Verwendung von break an den richtigen Stellen
vergessen und sich nicht bewusst sind, was die Folgen daraus sind.
Praktisch hat es auf mein Script keine Auswirkung, ob ich nun switch
oder if...else nutze.

> Fehler, die ich erwähnt habe.  Zum Beispiel gibt es einen Scriptfehler, wenn 
> Navigation und Update zusammenfallen, weil Du onunload nicht 
> window.clearTimeout(…) aufrufst.

Ja - wenn man es schafft, *exakt* in dem Moment eine Navigation
auszulösen, wenn gerade der Timer die Funktion aufrufen will. Das ist
weder mir noch den etwa 120 Nutzern dieses Scripts auf dem Server bisher
noch nicht gelungen. Aber ich werde das bei Gelegenheit vielleicht noch
ergänzen.


-- 
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

[toc] | [prev] | [next] | [standalone]


Page 1 of 3  [1] 2 3  Next page →

Back to top | Article view | de.comp.lang.javascript


csiph-web