Soweit funktioniert das auch alles.
Mit
server.on("/", handleArgs);
wird die Callback festgelegt und dort mit
server.arg("X") (usw.)
der Argumentwert gelesen.
Nun zum Problem.
Ich habe auch eine Unterseite, die eine eigene Callback
bekommt.
server.on("/STORE", TakeParam);
Bei Aufruf von 192.168.0.99/STORE
landet das Programm auch in TakeParam().
ABER:
Ich möchte auch hier URL-Parameter übergeben.
192.168.0.99/STORE?X=2&Y=6&Z=8ein
Und das will nicht funktionieren.
Hab ich irgendetwas falsch gemacht?
(Heißt: Anzahl Args = 0 wird gemeldet mit server.args())
Kann das jemand nachvollziehen, dass es nicht geht.
Oder besser, mir sagen DASS es geht - und wie... ?
Also:
Ich generiere eine Webseite, die den Benutzer auffordert, bestimmte Werte zu betätigen.
Damit er (oder wer auch immer) diese URL (mit /STORE) nicht auch einfach so mal eingibt, generiere ich
einen Freigabecode, den ich als Parameter zurück geben will. (Freigabecode ist im Server gespeichert
und muss stimmen, damit Übernahmebefehl angenommen wird)
In Firefox mit CTRL-U kann man ja den Seiten-Code aufrufen.
Dort steht dann z.B.
Im ESP-Code lande ich dann darauf hin in der Callback-Routine TakeParam (s.o.)
und gebe mir als erstes im SeriellenMonitor die Anzahl der Parameter aus
DEBUG1_PRINTLN("TakeParam...");
DEBUG1_PRINT ("Anzahl Args: ");
DEBUG1_PRINTLN(server.args());
Dann müsste STORE Deine aktive darzustellende Seite sein, oder?
Wenn STORE ein Verzeichnis ist (wovon ich ausgehe), müsste dort ein / dran.
Wenn dieses STORE kein Verzeichnis ist und nur dem Arduino sagen soll 'hier wird's jetzt speziell' - dann übergib dieses STORE ebenfalls als Parameter.
Man Jungs .... das geht aber auch schnell hier ... da kommt man ja kaum nach !
Vielleicht noch als Hinweis:
Mit ESP-Programmierung/Arduino beschäftige ich mich erst ein paar Tage. Mein Wissen beschränkt sich
daher auf viel Gelese im Intermet aber wenig eigene Erfahrung!
Also: @postmaster-ino
"....STORE Deine aktive darzustellende Seite sein"
Nicht wirklich. Ich will es eben nur benutzen, um über server.on in eine bestimmte
Callback-Routine zu steuern und dort dann die übergebenen Parameter (die ich ja gerade
nicht bekomme) zu verarbeiten.
STORE selbst als Parameter zu übergeben ist ein Idee, die sicherlich funktionieren wird.
Danke dafür.
Aber es ist eine Verlegenheitslösung. Denn soweit ich finden konnte, müssen Parameter
als Anhang an eine Resource möglich sein.
Mit / als Abschluss hinter STORE hatte ich auch schon experimteriert. Ohne Erfolg.
@noiasca
Kann ich nicht nachvollziehen.
Da, wie geschrieben, GAR KEINE Parameter ankommen. (server.args()) = 0), werde ich auch nicht
auf server.argName(0) oder server.arg(0) (sinnvoll) zugreifen können ....
amshh:
Damit er (oder wer auch immer) diese URL (mit /STORE) nicht auch einfach so mal eingibt, generiere ich
einen Freigabecode, den ich als Parameter zurück geben will. (Freigabecode ist im Server gespeichert
und muss stimmen, damit Übernahmebefehl angenommen wird)
Und warum dann nicht "POST" ?
generiere ich
einen Freigabecode
Wo wird der generiert?
Auf dem Server oder im Client?
Du könntest ?STORE&X=2&Y=6&Z=8ein anhängen - dann müsste STORE eine leere Variable darstellen.
Ob POST oder GET wird wohl Geschmackssache sein, Beides geht.
(wobei ...&Y=6 doch bereits POST darstellt, oder? Wir rufen die Seite ja nicht aus einer Form aus auf ... ggf. verwechsle ich gerade POST und GET - wäre nicht das erste Mal ;))
Nur darauf brauche ich eine Antwort.
(Und darum auch keinen vollständigen Sketch)
Post #8 scheint dies mit Ja zu beantworten.
Damit weiß ich dann, dass ich weiter suchen muss.
Oder aber den Vorschlag im Post #9 übernehmen. Das sollte auf jeden Fall funktionieren.
... nochmal.. (hat mir natürlich keine Ruhe gelassen ...)
Wer suchet der findet.
Habe irgendwann dann gelesen, dass bei input >> formaction bei dem angegebenen Link keine mit
"?" angehängten Parameter erlaubt sind. u.A. wird hier darüber diskutiert.
Habe dann den bereits weiter oben vorgeschlagenen zusätzlichen hidden input (Danke @Rintin) addiert, so dass dann folgendes dabei heraus kommt:
Und dann erhalte ich im Code mit server.arg("R") auch wie erwartet den Wert.