Path: csiph.com!2.us.feeder.erje.net!feeder.erje.net!1.eu.feeder.erje.net!newsfeed.datemas.de!weretis.net!feeder4.news.weretis.net!feeder5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: de.comp.lang.javascript Subject: Re: Gluecksrad Date: Tue, 15 Nov 2016 19:27:47 +0100 Organization: PointedEars Software (PES) Lines: 102 Message-ID: <3307965.kQq0lBPeGt@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1479234468 31105 eJwNxEkBwDAIBEBLnEuQAyT4l9DOY1zBmDA4zNd3xgSk2ryMCw0B9lgWWasVivDuf7/MODIfCvgQnQ== (15 Nov 2016 18:27:48 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Tue, 15 Nov 2016 18:27:48 +0000 (UTC) User-Agent: KNode/4.14.2 Cancel-Lock: sha1:2CxNvkWto0DANz37Z9LLS1UYQ3g= X-User-ID: eJwFwQkBACAIA8BKQ8ZjHEXoH8E7UxevoJvTxiandqxGtIidHXlehVAVedRTACyQmQiW0i711XQvnYvb7wMpEhTE X-NNTP-Posting-Host: eJwNxcEBwCAIA8CVQiEI4wDq/iPY+xzVxWeZ042Xd1d7MGGLfRRfSSGn2DUQZyPD9O+AjLXxABb0EIg= Xref: csiph.com de.comp.lang.javascript:4795 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* } } }; 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. > 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: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not cc me. / Bitte keine Kopien per E-Mail.