Comment faire une requête Ajax en Composant Joomla
Ce une capture d'écran de ce que j'obtiens quand j'appelle ma requête ajax:
Comment puis-je exécuter uniquement la tâche, sans impression de la page entière? C'est mon appel ajax:
$.ajax
({
type: "POST",
url: "index.php?option=com_similar&task=abc",
data: {
id: id,
name: name,
similar_id: similar_id,
},
cache: false,
success: function(html)
{
$("#flash").fadeOut("slow");
$("#content"+similar_id).html(html);
}
});
});
$(".close").click(function()
{
$("#votebox").slideUp("slow");
});
});
Que voulez vous dire par "sans impression de la page entière"? Pour ne pas imprimer quoi que ce soit? Aussi, vous ne montrez pas votre requête ajax, il devrait terminer avec }); .
regardez la capture d'écran. je n'ai pas écrit full ajax, parce que je ne pense pas que ce est important ici
Je ne vois pas ce que le résultat attendu est? Devrait anyting se produire?
par exemple je veux faire simple écho. le résultat est que je reçois de la page entière, avec de l'écho, au lieu de simplement l'écho
après l'écho de déclaration qui vient d'écrire la sortie.ou coller le code de la tâche dans votre message, il sera donc facile à comprendre.
regardez la capture d'écran. je n'ai pas écrit full ajax, parce que je ne pense pas que ce est important ici
Je ne vois pas ce que le résultat attendu est? Devrait anyting se produire?
par exemple je veux faire simple écho. le résultat est que je reçois de la page entière, avec de l'écho, au lieu de simplement l'écho
après l'écho de déclaration qui vient d'écrire la sortie.ou coller le code de la tâche dans votre message, il sera donc facile à comprendre.
OriginalL'auteur Jonuux | 2012-11-20
Vous devez vous connecter pour publier un commentaire.
Ne vont pas à l'abandon ou à mourir, Joomla! a c'est une très belle façon de traiter avec ce genre de choses.
Les réponses ci-dessous sont testés dans Joomla! 2.5 & 3 (pour 1.5. peut travailler aussi bien).
Général
Votre URL pour la tâche doit ressembler à ceci:
index.php?option=com_similar&task=abc&format=raw
Vous de créer le contrôleur qui va utiliser la vue, disons Abc, qui contiendra le fichier view.raw.html (identique à l'affichage normal de fichier).
Vous trouverez ci-dessous le code pour générer un code HTML brut réponse:
/controller.php
/views/abc/view.raw.php
/views/abc/tmpl/default.php
Remarque: C'est la solution que j'utiliserais si je devais renvoyer le code HTML (c'est plus propre et suit Joomla logique). Pour le retour de simples données JSON, voir ci-dessous comment tout mettre dans le contrôleur.
Si vous faites votre requête Ajax à un subcontroller, comme:
index.php?option=com_similar&controller=abc&format=raw
Que votre subcontroller nom (pour la vue brute) doit être
abc.raw.php
.Cela signifie également que vous /peut avoir 2 subcontrollers nommée Abc.
Si vous le retour JSON, il peut être judicieux d'utiliser
format=json
etabc.json.php
. Dans Joomla 2.5. J'ai eu quelques problèmes à obtenir que cette option fonctionne (en quelque sorte la sortie a été corrompu), j'ai donc utilisé des matières premières.Si vous avez besoin de générer une réponse JSON valide, découvrez les docs page Générer la sortie JSON
Vous aurait généralement mis ce code dans le contrôleur (que vous appelez un modèle qui permettra de renvoyer les données de l'encodage - un scénario très commun). Si vous avez besoin d'aller plus loin, vous pouvez également créer un JSON (vue de view.json.php), similaire à cru exemple.
De sécurité
Maintenant que la requête Ajax est au travail, ne fermez pas la page encore. Lire ci-dessous.
N'oubliez pas de vérifier la demande de faux.
JSession::checkToken()
venir dans maniable ici. Lire la documentation sur la Façon d'ajouter CSRF contre l'usurpation d'identité à des formesSites multilingues
Il peut arriver que si vous n'envoyez pas le nom de la langue dans la demande, Joomla ne pas traduire les chaînes de langue que vous voulez.
Envisager d'inclure quelque sorte, de la lang param votre demande (comme
&lang=de
).Nouveau dans Joomla 3.2! - Joomla! Interface Ajax
Joomla offre désormais une légère façon de traiter une requête Ajax dans un plugin ou un module. Vous souhaiterez peut-être utiliser le Joomla! Interface Ajax si vous n'avez pas déjà un composant ou si vous avez besoin de faire des demandes à partir d'un module de votre ont déjà.
J'ai ajouté quelques informations sur la façon de traiter avec subcontrollers. J'utilise ajax beaucoup dans mes composants et jusqu'à présent je n'ai pas eu de problèmes avec ce genre de choses. Si vous avez des problèmes n'hésitez pas à poster un peu de code ici ce qui ne fonctionne pas, de sorte que nous pouvons recueillir plus de la qualité de l'info sur la façon de Joomla! des œuvres. Merci.
Il y a une faute de frappe dans votre view.raw.php code. parrent::afficher($tpl) devrait être parent::afficher($tpl).
Corrigé, merci. N'hésitez pas à modifier toutes les erreurs que vous trouvez.
Essayé de modifier mais AFIN de ne pas accepter un 1 char modifier 🙂 Merci pour le facile à suivre solution!
OriginalL'auteur
Si vous voulez juste pour inclure la sortie de la réponse dans un élément HTML, ajouter format=raw de votre URL comme mentionné ci-dessus. Alors vous pourriez avoir un contrôleur de fonction comme ceci:
L'AJAX réponse de sortie tout ce dont vous avez imprimé /l'écho dans le contrôleur.
OriginalL'auteur elk