MVC: wie man ajaxt?

7

Ich werde ein Projekt mit einer Zend Framework MVC-Implementierung starten.

Wie arbeite ich mit Ajax? Ich meine, sollte ich den ganzen Ajax Code in den Controller legen? Oder in Sicht?

Zum Beispiel möchte ich, dass Beiträge vom Autor 'ivan' auf einer Seite angezeigt werden.

Normalerweise erstelle ich einen Link zu '/ posts / author / ivan' oder smth, erstelle eine neue Aktion wie 'byAuthorAction ()' im Posts Controller (oder vielleicht Users Controller, wo auch immer), schaue dafür ( und alles Code, was Posts von Model bekommt, geht dahin und erstellt eine neue Route dazu.

Wie füge ich Funktionen hinzu, um die Beiträge eines Benutzers in JSON zu erhalten, XML-Formate für AJAX und vielleicht API, halte das DRY-Prinzip und gestalte die Code-Struktur so schlau wie möglich?

-

Danke für die Antworten! Ich werde sehr froh sein, Kommentare über die Gestaltung von MVC in Situationen wie meiner zu sehen. Ich habe etwas Erfahrung in grundlegenden MVC-Prinzipien, aber nicht in komplizierteren Fällen. Vielleicht ein paar nützliche Links?

    
Valentin Golev 30.09.2009, 16:42
quelle

6 Antworten

13

Sie sollten wirklich das manuelle Kapitel über ContextSwitch Action Helper lesen. Aber hier ist eine kurze Übersicht:

  • Ihre View-Skripte (action-name.phtml) werden für die normale HTML-Ausgabe verwendet
  • Sie können einen Kontextwechsel für einige Aktionen im Controller initialisieren, so dass beispielsweise XML ausgegeben werden kann - xml context wird standardmäßig unterstützt und Sie würden Ihr View-Skript für xml context in (action-name.xml.phtml); XML Context deaktiviert auch das Rendern des Layouts
  • json wird auch vom integrierten Kontextwechsel unterstützt und die Standardoption ist sowohl das Layout als auch die Ansicht zu deaktivieren und alle Variablen, die der Ansicht von der Controller-Aktion im JSON-Format zugewiesen wurden, auszugeben. Diese Option kann mit umgeschaltet werden die Methode setAutoJsonSerialization (false) des Kontextwechsels; aber wenn Sie es wechseln, müssen Sie ein View-Skript action-name.json.phtml erstellen und die Variablen im JSON-Format von Hand ausgeben

Um zwischen diesen beiden Kontexten zu wechseln, müssen Sie Ihrer URL einen Formatparameter hinzufügen, z. / posts / author / ivan / format / json oder / posts / autor / ivan / format / xml. Wenn Sie das Format nicht angeben, gibt Ihre Anwendung plain html aus.

Eine spezielle Version des Context-Switches ist AjaxContext und Sie müssen diese auch manuell konfigurieren. Es verwendet nicht den Parameter 'format', um zu bestimmen, welches Format es für die Ausgabe verwenden soll, aber es prüft den in Ihrer Anfrage gesendeten Header und sucht nach dem Header 'X-Requested-With: XmlHttpRequest'. Wenn es vorhanden ist, wird der AjaxContext untersucht. Mit dem Aktionshelfer AjaxContext können Sie angeben, welcher Kontext für bestimmte Aktionen verwendet werden soll, wenn die Anfrage mit AJAX ausgelöst wird.

    
Goran Jurić 30.09.2009, 18:42
quelle
8

Sie können die gleichen Aktionen verwenden, um XML, JSON oder was auch immer zurückzugeben, indem Sie ajax-Anfragen erkennen und so in der Lage sind, ajax-Anfragen von normalen zu unterscheiden. Zum Beispiel:

%Vor%     
karim79 30.09.2009 16:47
quelle
2

Ihre Ansicht kann etwas anderes als HTML sein, und entweder kann die Pipeline auf die Anfrage reagieren, die ein Ajax-Post ist, oder Ihr Controller kann reagieren. In jedem Fall sollte es so einfach sein, eine andere Ansicht zurückzugeben.

    
neouser99 30.09.2009 16:49
quelle
1

Sehen Sie sich den AjaxContext Action-Helper (oder den ContextSwitch, den er erweitert) an, und Sie können genau denselben Controller-Code verwenden, indem Sie entweder zu einem separaten View-Skript (foo.json.phtml) wechseln oder foo.ajax.phtml usw. - wird automatisch von einem? format-Parameter abgerufen oder verwendet den JSON Action-Helper, der ein Objekt zurückgibt, das alle Variablen enthält, die Sie der Ansicht zuweisen - also nicht benötigen Echo von Ihrem Controller (was Unit-Tests vermasselt, sollten Sie sie haben).

    
Greg 30.09.2009 17:48
quelle
0

Meine Syntax könnte älter sein, aber das ist eine Skizze meiner REST-Aktion von meinem Index-Controller:

%Vor%     
rasx 30.09.2009 18:05
quelle
0

Wenn ich Ajax mit Codeigniter verwende, gebe ich direkt aus dem Controller aus.

Ich benutze auch separate Controller für einfache Ajax-Anfragen wie Markierungen, Favoriten usw. Für Ajax-Anfragen wie Login, Kontakt usw. würde ich Logik zum normalen Pfad (zB domain.com/contact) hinzufügen, um mit einem Ajax umzugehen anfordern. Ich gebe dann json aus und kille die Skriptausführung.

    
Jeff 30.09.2009 18:48
quelle