Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: send_data optimieren
BeitragVerfasst: 26 Jul 2010, 08:23 
Offline
Novize

Registriert: 17 Aug 2009, 14:40
Beiträge: 15
Folgendes Ziel:
Ich habe ein View mit einem Formular zum Erstellen eines Objektes. Nach dem erfolgreichen Erstellen soll folgendes Passieren (quasi, nachdem man den Button "Submit" gedrückt hat):
1. Zuerst muss die Information von diesem Objekt als PDF exportieren
2. Und direkt danach weitergeleitet auf die liste der Objekte dieses Models.
Also sprich, das Schema: create -> get_pdf -> index.
Das funktioniert aber nicht so einfach, denn die Methode get_pdf liefert ja pdf mit send_data, das heißt, man kann da nicht auch noch redirect_to einfügen.

Meine Lösung: Nachdem man den Button "Submit" klickt, wird eine ajax-Anfrage zum "create" geschickt. Create liefert die ID des Objectes und in einem Popup-Fenster bekomme ich meine pdf-Datei und mit javascript nach ein paar Sekunden setzte ich window.location auf index.

Das Funktioniert ja alles gut. Das einzige Problem, das mich stört: Popup. Wenn der Benutzer Popups deaktiviert hat, dann hat man ein Problem.

Hat jemand vielleicht eine Idee wie ich das Ganze anders umsetzen kann?
Danke.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: send_data optimieren
BeitragVerfasst: 26 Jul 2010, 09:06 
Offline
Hacker

Registriert: 29 Nov 2008, 17:05
Beiträge: 425
Was spricht dagegen in die create Action dien Befehl zum Erstellen des pdf einzubauen? Oder evtl auch einen Filter dafür zu nehmen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: send_data optimieren
BeitragVerfasst: 26 Jul 2010, 14:40 
Offline
Lehrling

Registriert: 30 Jul 2007, 16:54
Beiträge: 89
Wohnort: Hamburg
Eine Controller-Action liefert immer nur ein Ergebnis (rendern) an den Client aus.
Man kann natürlich das PDF in der Action mit erstellen, dieses dann aber nicht via "send_data" an den Client zurückschicken + eine andere HTML-Seite öffnen, weil man sonst einen "duplicate render" (o.ä.) bekommt.

Wenn du eine zentrale Stelle zur Verwaltung der PDFs für einen User hast, könntest du es dort ablegen und auf der Folgeseite einen Hinweis anzeigen, oder auf der Folgeseite, falls es im Kontext nicht stört - einen Downloadlink anbieten.

Ansonsten wird es wohl nicht ohne Popup klappen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: send_data optimieren
BeitragVerfasst: 28 Jul 2010, 17:46 
Offline
Novize

Registriert: 17 Aug 2009, 14:40
Beiträge: 15
Danke für eure Antworten. Ich lasse es einfach so wie es ist. Ich dachte nur, jemand kennt das Problem und hat schon eine Lösung gefunden. Es gibt dafür keine andere Lösung. Na, dann..


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: send_data optimieren
BeitragVerfasst: 28 Jul 2010, 17:56 
Offline
Nuby
Benutzeravatar

Registriert: 28 Jul 2010, 13:40
Beiträge: 6
Mein Vorschlag wäre:
1. Wenn PDF Generierung länger dauert: create -> Prozess starten (z.B. mit Delayed Job Plugin) -> Seite mit "Bitte warten Sie" anzeigen und auf dieser Seite regelmäßig über Ajax abfragen ob die Verarbeitung schon fertig ist. Wenn ja, herunterladen lassen.
2. Ansonsten kann man hierfür ganz gut über iframe oder über Ajax: create -> index (mit Ajax Anfrage zu get_pdf)

Oder habe ich das Problem falsch verstanden?

_________________
Bild
Mein Blog auf PC.DE
http://pc.de/downtown/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: send_data optimieren
BeitragVerfasst: 11 Aug 2010, 17:12 
Offline
Novize

Registriert: 17 Aug 2009, 14:40
Beiträge: 15
Du hast das Problem schon richtig verstanden.
Zu deinen Vorschlägen:
1. Die Erstellung von PDF's dauert nicht mal eine Sekunde. Der User muss auf nichts warten.
2. Mit Ajax-Anfrage die PDF's holen? Die Idee hatte ich auch. Nur, wenn ich eine Ajax-Anfrage zu der Methode "get_pdf" sende bekomme ich so eine Antwort, mit der ich nichts anfangen kann, denn die Methode "get_pdf" sendet ja eine Antwort mit "send_data <pdf-string>". Die Datei wird nirgendwo gespeichert, sondern direkt an den Browser geschickt. Und ajax bekommt ja die PDF-Daten, aber wie kann ich dann mit Javascript die Daten bearbeiten? Und danach den User dazu auffordern die Datei zu speichern. Soweit ich weiß, bietet Javascript dazu keine Werkzeuge an.
3. Du hast mich aber auf die Idee gebracht: Die Objekte werden gespeichert (ich bekomme ja mit ajax die ids von den gespeicherten Objekten), und der User wird dann weitergeleitet auf "index" (also die Objekte anzeigen) und da irgenwo platziere ich so einen Link "Eben gespeicherte Objekte als PDF runterladen".
Aber ist es nicht für den User verwirrend? Zuerst klickt auf "Speichern und als PDF exportieren", und danach muss er noch mal auf den Link gehen "...als PDF exportieren".

Hm...So wie es jetzt funktioniert, ist auch gut. Aber ich möchte es halt optimieren. Besonders unter IE ist das Problem ziemlich krass. In IE muss dann jeder User manuel die PopUps freischalten usw...Ist echt nervig.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: