Ajax url Problem mit Django

Django, Flask, Bottle, WSGI, CGI…
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie schon geschrieben, benutzt man heutzutage kein jQuery mehr, weil alle Funktionen von modernen Browsern in ähnlicher Form schon nativ unterstützt werden.
Wenn Du die gesamte HTML-Seite neu aufbauen willst, bentuzt Du window.location, dann brauchst Du kein Ajax. Wenn Du nur Teile der Seite ersetzen willst, mußt Du das entsprechende DOM-Element finden und dessen Inhalt durch das Ergebnis des Ajax-Aufrufs ersetzen.
Bei komplexeren Seiten macht man das über ein passendes Framework (vue.js), das das HTML per Javascript rendert und schickt nur noch die rohen Daten per Ajax.
Benutzeravatar
__blackjack__
User
Beiträge: 14012
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das mit dem kein jQuery ist IMHO Propaganda. Man benutzt benutzt sehr wohl heute noch jQuery. Es mag sein das man es technisch gesehen weniger bräuchte, aber das macht es nicht überflüssig. Ich sehe keinen Grund umzulernen und mir gefällt auch die API im grossen und ganzen wesentlich besser, so das ich mir ziemlich sicher bin, das ich auch wenn ich sowieso neu lernen müsste, auf jQuery setzen würde. Was konkret `fetch` vs. Ajax angeht würde mich das „Experimental. Expect behaviour to change in the future“ bei der Fetch-API abschrecken, es sei denn ich hätte Kontrolle darüber welche Clients die Benutzer einsetzen (müssen).
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

@Metatron: Jain. Also ja, die ausgefüllte HTML-Vorlage wird zurückgesendet und ist in dem Argument enthalten das der `success`-Funktion übergeben wird, aber warum benutzt Du einen Ajax-Aufruf wenn doch eigentlich das passieren soll was ohne Ajax passieren würde?
ich würde gerne noch ein paar Daten mit schicken, was gibt es den für alternativen?
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Was möchtest Du denn genau machen? Beschreib doch mal Dein Problem etwas ausführlicher, sonst müssen wir hier raten, was Du denn statt dessen machen könntest.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

also ich habe mir eine javascrip Ausgabe geschrieben. Wenn ich nun auf bestimmte Items innerhalb der Karte mit der Maus klicke, möchte ich ein Eingabeformular anzeigen lassen.
Außerdem möchte ich ein Array von Daten beim klicken des Items, an den Server senden, damit er die Information im Eingabeformular verwenden kann.

Das Anzeigen des Eingabeformulars funktioniert ohne probleme, sofern ich einen HTML-Button als auslöser verwende (hier fehlen dann natürlich die Daten die gesendet werden müssen).
Das Anklicken im Javascript funktioniert auch.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst also nur ein Formular anzeigen, mit Daten, die schon im Browser vorhanden sind? Dann ist das eine typische Aufgabe die man in reinem Javascript löst, indem Du ein verstecktes Formular vorhältst, dessen Eingabefelder beim Click auf Deine Karte gefüllt werden und danach angezeigt wird.

Kannst Du mal eine Beispiel-Karte mit Daten und Formular hier posten, dann können wir die konkreter Weiterhelfen.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

Jain,
das Eingabeformular wird aus einem Model generiert, aber ich würde gerne die Koordinaten des Item zusätzlich mit zurück geben.
Ob es jetzt beim Anklicken des Item gesendet wird oder erst mit dem submit des Eingabeformulars, ist ja eigentlich egal. Eventuell wäre zweiteres sogar besser.
Benutzeravatar
__blackjack__
User
Beiträge: 14012
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Na dann wäre es wohl am einfachsten bei einem Klick auf die Karte die Koordinaten in die entsprechenden Felder des Formulars einzutragen. Wenn es keinen Sinn macht diese Werte dem Benutzer im Formular anzuzeigen, kann man das mit versteckten Eingabefeldern machen.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

ja ok, aber...

der ablauf ist ja folgend:
1. eine Seite mit dem Javascript template wird geladen
2. der Nutzer selektiert ein Item
3. das Javascript sendet führt zum Beispiel ein window.location.href aus.
4. die View.py rendert die Seite neu, jetzt jedoch mit dem Eingabeformular.

Das Problem ist ja das durch das neue Rendern die Daten aus dem Javascript verloren sind.
Also müsste das Javascript mit dem window.location.href eigentlich die Daten zurück zum Server senden?
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn der Server nur die Daten von Javascript durchreicht, dann ist der Schritt 3 unnötig.
Wenn der Server Daten noch anreichert, dann mußt Du entscheiden, ob es per GET oder per POST-Request laufen soll, und bei zweiterem eine Form anlegen und diese per Javascript absenden.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

Nein er reicht sie nicht durch, er speichert sie ab. Und generiert ein spezifischen Fragenkatalog
Antworten