Joomla - Controller task zurückgibt, die JSON-Daten
Habe ich die Aufgabe run
in meinem controller. Ich will es zurück JSON-Daten. So wie es da steht, ich bin immer meine JSON-Daten verpackt in der template HTML. Wie sage ich Joomla, um nur zurück, JSON-Daten aus dem controller? Dies ist die Funktion die ich habe:
public function run ( ) {
JFactory::getDocument()->setMimeEncoding( 'application/json' );
JResponse::setHeader('Content-Disposition','attachment;filename="progress-report-results.json"');
JRequest::setVar('tmpl','component');
$data = array(
'foo' => 'bar'
);
echo json_encode( $data );
}
Und dies gibt:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr">
...
</head>
<body class="contentpane">
<div id="system-message-container">
</div>
{"foo":"bar"}
</body>
</html>
Möchte ich erhalten:
{"foo":"bar"}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu bauen, eine spezielle JSON-view (
view.json.php
; oder controllerprogressreports.json.php
) zu erreichen. Das einzige, was Sie tun müssen, ist das echo der JSON-string und schließen Sie die Anwendung.Brauchen Sie nur eine separate Ansicht (oder controller), wenn Sie wollen, um die gleichen Funktion mit HTML-und JSON-Ausgabe (gewählt durch den Anrufer).
Müssen Sie jexit (), um die json-Daten ohne Joomla-Ausgang.
Antwort bekommen.
Brauchte ich einen neuen controller. In meinem Fall die original-controller genannt wurde, progressreports.php - ich habe einen neuen controller namens progressreports.raw.php.
Dann beim aufrufen der url, hinzufügen, format=raw". also
Je nachdem, was Sie tun, möchten Sie vielleicht, um ein json-Dokument, whatever.json.php statt whatever.html.php.
Ich habe die Antwort akzeptiert, es hat nicht funktioniert mit joomla 3.4.3. Wenn jemand das selbe problem hat, hier ist die Lösung für niedrigere joomla Versionen:
Den content-disposition-header wird nur benötigt, wenn Sie bieten möchten, um die Datei zum download.
aus:
Ich wollte dieses Projekt und trinken somethink, es zu vergessen. Auch von vorne anfangen und schreiben eine neue CMS wäre weniger schmerzhaft. :S
Mag ich nicht zu viel JResponseJson und auch ich mag mich einreihen von Nachrichten für die nächste Anfrage, also habe ich die folgende Methode auf der main-controller der meine Komponente:
In jeder Aufgabe der controller oder sub-controller könnte man nun Folgendes tun: