Seite 1 von 2

Inhalte von Webseiten [ERLEDIGT]

Verfasst: Mi, 25. Mai 2022 9:35
von Manfred
ich stehe gerade vor einem Problem.
Ich setze mich mit javascript auseinander und sehe, das man damit die komplette Webseite mit "document." durchsuchen kann. Also alles was es nur gibt. Damit kann man dann über Classname, oder ID usw. alle Elemente finden und Inhalte auslesen von was weiß ich allem. Bekommt man eigentlich irgendwas zurück in xbt2net, mit dem man sowas auch machen kann? Bisher sehe ich nur, das die Eingabefelder über ThreadObject():getCargo() ermittelt werden können, aber das erscheint mir doch recht wenig.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 12:25
von Marcus Herz
Javascript wird auf dem Client ausgeführt. Nicht auf dem Server.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 12:34
von Manfred
das weiß ich. Ich wollte nur ein Beispiel geben.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 12:58
von Tom
Das DOM - das Document Object Model - ist eine Struktur, die man im Client hat, und die quasi das, was man als Dokument (oder z.B. auch als XML-Struktur) hat, noch einmal als hierarchisches Objekt zur Verfügung stellt, auf dessen Elemente man gezielt zugreifen kann - auch, um sie beispielsweise live zu verändern. Das macht der Browser sozusagen als Service aus dem HTML-Dokument. Ohne das DOM wäre es sehr kompliziert, etwa mit JavaScript zu agieren.

Aber, wie Marcus angemerkt hast - Du bist ja der Server. Du hast also vorher das Dokument selbst geliefert. Wenn das Dokument ein Formular enthielt, bekommst Du was zurück. Sonst eigentlich nicht.

Wott du ju wonnt?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 13:39
von Manfred
hm, wie erklär ich es meinem Kinde?
Ich habe eine HTML Seite, die dynamisch erweitert wird. Es wird eine Listbox erstellt, die zu Anfang nur als Gerüst steht und dann über Javascript mit Daten gefüllt wird. Dann wird über einen ACTION Button eine Xbase Funktion aufgerufen um damit die Eingaben zu speichern. In der xbase Funktion komme ich aber (auf meinen ersten Blick) nur an die anderen Eingabefelder dran (mit Threadobjekt():getVar()), die ich direkt beim ersten Aufbau der Maske feste vorgegeben habe. In der dynamischen Listbox stehen aber Einträge, die ich in der xbase Funktion brauche um diese in eine Tabelle zu speichern. Wenn ich in den Debugger vom Webbrowser aufrufe, dann kann dort über Javascript z.B. alles durchlaufen und durchsucht werden. Deshalb ja meine Frage, ob xb2net evtl. auch das komplette DOM übergeben bekommt, ich es aber nicht in der Klasse finde, weil ich nicht weiß wo ich suchen muß. Ansonsten müßte ich statt des Action Buttons einen Button einbauen, der ein javascript aufruft, in dem dann die Listbox ermittelt und umgewandelt wird und dann evtl. als JSON Objekt oder was weiß ich an die Xbase Funktion übergeben wird, die dann damit weiter agieren kann. Nur, die Erfahrung hat mir gezeigt, immer wenn ich mir etwas tolles kompliziertes gebaut habe, kam von irgendwo ein Tipp:" das geht doch viel einfacher, mach das doch einfach nur so und so." :lol:

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 13:49
von Tom
Hallo, Manfred.

Deine Listbox (also Dein "select"-Input) sollte einen Namen und/oder eine ID bekommen. Der Wert, der gewählt wird, ist über oClient:GetVar(<Name>) abrufbar (oClient oder ThreadObject()). Aber Du brauchst den Namen bzw. die ID.

Code: Alles auswählen

<form>
...
<select name="MeinSelect">
* Elemente
</select>
...
</form>
Das ist unabhängig davon, ob das Element dynamisch eingesetzt wird oder bereits mit dem HTML kommt. Wenn Du das Formular serverseitig auswertest, enthält "oClient:GetVar("MeinSelect") den gewählten Wert.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 13:57
von Manfred
Hi Tom
und das scheint der Irrtum zu sein. Alles ist gegeben, aber es wird NIL zurückgeliefert.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 14:30
von Tom
Hallo, Manfred.

Ich nutze das intensiv; es ist eine Basistechnologie. Vergibst Du Namen oder IDs? Hier ist die Doku zu ThreadObject():GetVar:
getvar.png
getvar.png (43.95 KiB) 4566 mal betrachtet
Was bekommst Du, wenn Du GetVar() ohne Parameter abfeuerst (dann müsstest Du eine Liste mit allen Variablen und deren Inhalten bekommen)? Oder ein bisschen mit dem zweiten Parameter spielst?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:11
von Manfred
Hi Tom,
ich vergebe Namen ID Class
das hier habe ich versucht
das würde auf die ID gehen

Code: Alles auswählen

cWert           := ThreadObject():GetVar("umlauf_auswahl",VAR_QUERY)
          cWert           := ThreadObject():GetVar("umlauf_auswahl",VAR_CONTENT)
          cWert           := ThreadObject():GetVar("umlauf_auswahl",VAR_ANY)
Es gibt immer NIL als Ergebnis. Was mache ich wohl verkehrt?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:14
von Tom
Hol Dir mal die Liste, also GetVar() ohne Parameter.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:17
von Manfred
ergibt ein leeres Array

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:26
von Tom
Mmh. Bist Du im richtigen Thread? Das ist jetzt echt stochern im Trüben. Aber wenn ich per Submit/GET ein Formular zurückbekomme, erhalte ich vom Client-Objekt die Inhalte der Formularvariablen über oClient:GetVar(), genau wie ich die über SetCargo für die Response gesetzten Daten dort über GetCargo abrufen kann (Achtung, das ist nicht dasselbe!). Ist das Form(ular) ordentlich formatiert? Siehst Du die "name"-Zuweisung der Variablen im Quelltext, wenn Du den im Browser öffnest?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:28
von Manfred
Ob ich im richtigen Thread bin? Wie prüfe ich das? Kann man auch im falschen thread sein? Wie macht man das?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 15:40
von Tom
Indem Du Dir beispielsweise ThreadObject():ClassName() anschaust. Wenn die Antwort "xbHttpThread" lautet, bist Du richtig. Wenn die Antwort nur "Thread" lautet, bist Du irgendwo (oder die Session ist geschlossen). Aber die anderen Fragen waren eigentlich wichtiger. Bist Du Dir sicher, dass Dein Formular sauber aufgebaut ist? Sieht man die Namenszuweisungen der Variablen im Quelltext?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 16:20
von Manfred
es wird xbHTTPRequest zurückgeliefert.
Und die namenszuweisungen sind bestimmt vorhanden, sonst könnte ich die einzelnen Elemente nicht über javascript ansprechen!?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 16:33
von Tom
Du bist eine Ebene zu tief. HttpRequest ist ein Kind von HttpThread.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 16:39
von Manfred
nee, nur etwas schääl auf den Augen. habe mich in der Zeile vertan. Es kommt xbHTTPThread heraus. :roll:

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 16:44
von Tom
Und die namenszuweisungen sind bestimmt vorhanden, sonst könnte ich die einzelnen Elemente nicht über javascript ansprechen!?
Dann nochmal. Ist das Formular sauber formatiert (<form>-Tags geschlossen)? Gibt's ein Submit innerhalb der <form>-Tags? Solche Sachen.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 16:51
von Manfred
der Quelltextanzeiger vom FF meldet keine Fehler. Innerhalb des Form gibt es ein Submit. das ist ja der Button, der für Speichern sorgen soll

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 17:02
von Tom
Gibt es nur diese ominöse Listbox oder auch noch andere benannte Formularelemente?

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 17:24
von Manfred
alles ist durchbenannt. ID Name. Und die Eingabefelder finde ich ja auch über :getvar("name").

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 18:27
von Tom
Das widerspricht Deiner Mitteilung, GetVar() ohne Parameter würde ein leeres Array liefern.

Re: Inhalte von Webseiten

Verfasst: Mi, 25. Mai 2022 18:29
von Manfred
was soll ich sagen? Ich weiß nicht weiter.

Re: Inhalte von Webseiten

Verfasst: Do, 26. Mai 2022 12:28
von Tom
Hallo, Manfred.

Es ist nicht möglich, dass Dir ThreadObject():GetVar("name") den korrekten Inhalt von "name" liefert und in der nächsten oder vorigen Zeile ein leeres Array, wenn Du es ohne Parameter (also ThreadObject():GetVar()) ausführst. ThreadObject():GetVar() listet alle Variablen und deren Inhalte auf, die mit der Response kamen.

Wäre es Dir möglich, ggf. eine verkürzte Fassung Deines Formulars zur Verfügung zu stellen, einschließlich des Codes, der die Listbox bestückt? Wenn Du das nicht öffentlich machen willst, notfalls auch per PN - ich würde mir das dann morgen in meinem eigenen System anschauen.

Re: Inhalte von Webseiten

Verfasst: Do, 26. Mai 2022 14:32
von Manfred
Tom,
was soll ich sagen? Ich habe es gerade ausprobiert.
threadobject():getvar()-> {}
threadobject:getcar("bezkurz") -> "test" das ist der Wert, der im Inputfeld steht
Ich glaube das Thema hatte ich mit Martin schonmal durchgekaspert.
wenn ich :getcargo() mache, dann kommen etliche Angaben zurück.