Zend FlashMessenger in jQuery auslösen

8

Ich stehe vor einem Problem und ich frage mich, ob mir jemand in die richtige Richtung zeigen könnte.

Ich verwende Zend's FlashMessenger in meinen Controllern, aber in einer meiner Dateien behandle ich meine Formulare über AJAX-Posts. Ich dachte Humane-Flatty wäre in diesem Fall ein schöner Ersatz für Zend FlashMessenger, aber das Layout ist komplett anders.

Gibt es eine Möglichkeit, Zend Flashmessenger in meinem AJAX-Beitrag auszulösen?

So nenne ich Zend FlashMessenger in meinen Controllern:

%Vor%

Das ist meine jQuery:

%Vor%     
Matheno 29.04.2015, 09:29
quelle

5 Antworten

1

Der Trick zu Ihrer Antwort liegt in Ihren View-Skripten (* .phtml-Dateien).

Ich nehme die folgende index.phtml-Datei als Ansichtsskript Ihrer indexController-Datei an, die das Formular druckt und Ihr Ajax ausführt. Wenn Sie auf die Schaltfläche "Externer Inhalt abrufen" klicken, wird das Ergebnis der Ajax-Antwort von / index / line controller in das div1-Tag eingefügt.

%Vor%

Der obige Code holt das Ergebnis von lineAction bei indexController ('/ index / line'). Fügen Sie die folgenden Zeilen in IndexController.php

hinzu %Vor%

Rufen Sie jetzt das View-Skript Ihrer Zeilenaktion auf (line.phtml). Fügen Sie die folgenden Zeilen in line.phtml

hinzu %Vor%

Nun führe deinen Code aus. Ihr Ajax wird Zend FlashMessenger erfolgreich ausführen und die JavaScript-Warnmeldung 'Succesfully added' anzeigen.

Ich habe den obigen Code getestet und es funktioniert großartig mit Zend 1.12.

    
Waqas Bukhary 09.05.2015, 13:48
quelle
2

Ich nehme an, Ihre URL, Funktionszeile in Ihrem Index-Controller "index / line", gibt etwas JSON / XML oder etwas HTML zurück, das Sie zurückgeben und in ein div mit #open_orders id einfügen.

Die Idee ist, dass Ihr Ajax-Aufruf eine Funktion von Ihrem Controller zurückgeben muss, der Ihren FlashMessenger-Aufruf aufruft,

$this->_helper->FlashMessenger(array('success' => 'Succesfully added'));

Mit anderen Worten, dieser Code muss von Ihrem Controller ausgeführt werden und über einen direkten Aufruf an Ihren Client (Rückruf Ihres Ajax-Anrufs in Ihrem jquery statementent) zurückgegeben werden.

Sie können entweder partielle Antworten von Ihrem "res" zurückgeben und sie teilen und den richtigen Teil an Ihr div anhängen, und den anderen Teil an ein vorhergehendes div mit einer anderen ID anfügen, damit Ihr injizierter FlashMessenger Code funktioniert,

ODER

Wo haben Sie den folgenden Kommentar

%Vor%

Sie rufen einen anderen Ajax-Aufruf zu einer anderen Funktion in Ihrem Controller auf, wo Sie den FlashMessenger-Code in dieser Funktion aufrufen, so dass Sie sowohl Ihre benötigten Bits als auch den FlashMessenger

aufrufen

TLDR: Sie benötigen diesen FlashMessenger-Aufruf auf Ihrer Zend (Server) -Seite und rufen diese Funktion in Ihrem Controller von Ihrem Client aus über den .ajax-Aufruf

auf

Hoffe, das hilft.

    
serdarsenay 04.05.2015 11:29
quelle
0

Ich denke, es gibt zwei Ansätze, die Ihren Bedürfnissen entsprechen könnten:

1) Wie von serdarsenay erwähnt, könnten Sie ein allgemeingültiges Anfrage / Antwort-Modell auf der Grundlage von beispielsweise json oder Ihrem bevorzugten Format entwickeln, das die Kommunikation zwischen dem Client und der Serverseite einschließlich eines Ortes für Nachrichten organisiert. Beispiel in json:

%Vor%

Dieser Ansatz hat wahrscheinlich zwei Hauptprobleme: Es erfordert, dass Sie ein entsprechendes jQuery-Gegenstück schreiben, das weiß, wie Sie mit Ihren json-Antworten umgehen, z. den Statuscode analysieren und Nachrichten anzeigen, in denen sie angezeigt werden sollen. Um es wiederverwendbar zu machen, können Sie dieses Gegenstück so gestalten, dass es auch einen Rückruf nimmt, so dass Sie in der Lage sind, irgendwie spezifisch zu reagieren, abhängig von der Art des Formulars, das Sie senden. Außerdem muss die Serverseite wissen, dass dies eine Ajax-Anfrage ist, so dass sie die Nachricht nicht dem FlashMessenger , sondern zu einer json-Antwort hinzufügen muss, falls der Verarbeitungs-Controller und die Ansicht funktionieren sollen auf beide Arten direkt oder über Ajax zugegriffen.

Ich wollte dies zuerst vorstellen, um einen anderen Ansatz zu rechtfertigen:

2) Schreiben Sie einen Wrapper auf die Serverseite, der nichts anderes tut, als Ihre FlashMessenger-Nachrichten zu wiederholen und sie über Ajax separat aufzurufen. Ja, Sie haben dann eine zusätzliche GET-Anfrage, aber in Anbetracht der Flexibilität, die Sie erhalten, könnte es sich lohnen. Ihre Serverseite würde unberührt bleiben, alles würde funktionieren wie vorher, egal ob direkt oder über Ajax angefordert. Das einzige, was Sie tun, ist, einen zusätzlichen Ajax-Aufruf zu Ihrem FlashMessenger-Wrapper hinzuzufügen, wann immer Sie denken, dass es Nachrichten geben könnte, die dem Benutzer angezeigt werden sollten. Und bedenken Sie nur den Fall, dass der Ajax-Aufruf fehlschlägt (keine Antwort, Timeout, was auch immer) und die Seite muss vom Benutzer neu geladen werden: Kein Problem, da Ihre Server-Seitenansichten immer die gespeicherten Flash-Nachrichten anzeigen, die ansonsten verloren gegangen wären es gab zB eine erfolgreiche Einfügung in eine Datenbank, über die der Benutzer nicht informiert wurde.

Der erste Ansatz ist nicht eng mit Ihrer Frage verbunden, aber ich fühlte, dass ich diese Alternative erwähnen muss, um die zusätzliche GET-Anforderung für Ansatz 2 zu rechtfertigen.

So könnte ein Pseudo so aussehen:

%Vor%

Und wann immer Sie es auf der Clientseite benötigen (d. h. nach der Formularübermittlung, nach erfolgreicher Benutzeranmeldung usw.)

%Vor%     
tworabbits 09.05.2015 07:15
quelle
0

Ich verstehe Ihre Frage vielleicht nicht richtig, aber hier ist meine Lösung:

Sie brauchen keinen flashMessenger, Sie müssen nur eine Nachricht anzeigen, wenn ich das richtig verstanden habe. Mit dem Standard-HTML von FlashMessenger würden Sie so etwas tun:

%Vor%

Rufen Sie einfach showFlash("success", "Orderline succesfully added."); auf, wenn die Flash-Nachricht angezeigt werden soll.

Sie müssen möglicherweise "body" auf das Element ändern, dem Sie die Nachricht hinzufügen möchten.

    
keewnn 09.05.2015 17:36
quelle
0

Ich nehme an, dass dieser URI '/ index / line' (die lineAction in IndexController) die Nachricht zurückgeben soll.

Sie sollten vom Flash lesen (oder im Grunde die Nachricht rendern), um die Nachrichtensitzung zu leeren. Andernfalls wird es im nächsten Render im Hauptlayout dem Benutzer angezeigt.

Im Allgemeinen empfehle ich nicht, eine Flash-Nachricht für jede Nachricht der Form an erster Stelle zu setzen. Es wäre angemessener, wenn Sie nur eine Flash-Nachricht festlegen, wenn Sie eine Umleitung hatten. Die Anwendung von Flash ist, wo Sie eine Nachricht auf der nächsten Seite (oder nächsten Besuch innerhalb derselben Sitzung) zeigen möchten.

    
Mehdi 11.05.2015 08:29
quelle

Tags und Links