Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.javascript > #4784 > unrolled thread
| Started by | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| First post | 2016-11-11 17:19 +0100 |
| Last post | 2016-11-23 16:21 +0100 |
| Articles | 20 on this page of 50 — 5 participants |
Back to article view | Back to de.comp.lang.javascript
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 →
| From | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| Date | 2016-11-11 17:19 +0100 |
| Subject | Gluecksrad |
| 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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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]
| From | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| Date | 2016-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]
| From | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Klaus Ketelaer <spam@spambouncer.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2016-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2016-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