J'ai la tâche et ce retour: p> Je voudrais obtenir: p> exécuter code> dans mon contrôleur. Je veux qu'il retourne des données JSON. Comme il se trouve, je reçois mes données JSON enveloppées dans le modèle HTML. Comment puis-je dire à Joomla pour simplement retourner les données JSON du contrôleur? C'est la fonction que j'ai:
{"foo":"bar"}
7 Réponses :
obtenu la réponse.
Je devais faire un nouveau contrôleur. Dans mon cas, le contrôleur d'origine a été appelé, ProgressReports.php - J'ai fait un nouveau contrôleur appelé progresReports.raw.php. P>
puis lorsque vous appelez l'URL, ajoutez le format = RAW. I.e. P>
index.php?option=com_foo&task=progressreports.run&format=raw
Il y a quelques façons de le faire. Ce que vous avez fait est une solution et Nagarjun a souligné quelque chose que vous devez vous assurer que vous faites pour les demandes JSON. Vous pouvez également utiliser un contrôleur ProgresReports.json.php et modifier votre demande au format = JSON. À la fin de la journée, tant que cela fonctionne pour vous, alors vous êtes prêt à partir.
Vous devez utiliser jexit () code> pour renvoyer des données JSON sans aucune sortie JOOMLA. P>
index.php?option=com_mycomponent&task=item.run&format=json
Selon ce que vous faites, vous voudrez peut-être créer un document JSON, quoi que ce soit.json.php au lieu de tout.html.php. p>
Vous n'avez pas besoin de créer une vue spéciale JSON ( vue.json.php code>; ou contrôleur
progresReports.json.php code>) pour atteindre cela. La seule chose que vous avez à faire est d'echo la chaîne JSON et de fermer l'application.
public function run( )
{
JFactory::getDocument()->setMimeEncoding( 'application/json' );
JResponse::setHeader('Content-Disposition','attachment;filename="progress-report-results.json"');
$data = array(
'foo' => 'bar'
);
echo json_encode( $data );
JFactory::getApplication()->close(); // or jexit();
}
Cette réponse est de 2013 et n'a pas travaillé pour moi. Au lieu de cela, j'ai utilisé la solution d'Inf3RNO, qui fonctionne bien
J'ai vérifié la réponse acceptée, elle n'a pas fonctionné avec Joomla 3.4.3. Si quelqu'un a le même problème, voici la solution pour les versions de Joomla inférieures:
$data = array( 'foo' => 'bar' ); header('content-type: application/json; charset=utf-8'); echo json_encode($data); JFactory::getApplication()->close();
Je n'aime pas beaucoup de Jresponsejson et j'aime aussi en faisez des messages pour la prochaine demande, j'ai donc fait la méthode suivante sur le contrôleur principal de mon composant: dans n'importe quelle tâche du contrôleur ou du sous-contrôleur, vous pouvez maintenant effectuer les éléments suivants: P> public function sampleTask()
{
$app = Factory::getApplication();
$app->enqueueMessage("Done (for the next user's request)", 'success');
$this->returnJson("json data");
}
Vous devez ajouter le paramètre & format = JSON strong> em> à votre URL.
Cela indique au système que vous attendez une réponse JSON. Le système va rendu jsondocument et enverra des en-têtes de navigateur corrects comme réponse. P> Il n'est pas nécessaire de fermer l'application avec Si vous fermez l'application, vous manquerez beaucoup de choses pendant le processus de rendu. Beaucoup d'événements ne seront pas déclenchés. En outre, vous devrez envoyer manuellement des en-têtes pour le type de contenu. P> Votre code devrait ressembler à celui-ci. Cette approche est