2010-10-18 2 views
1

Mon problème concerne jQuery .post et Joomla. J'ai un modèle avec une forme qui est dans l'une des zones d'accordéon (en utilisant l'accordéon jQuery UI). J'ai un type de bouton = soumettre dans le formulaire. Le formulaire html est généré via jQuery lorsqu'un utilisateur clique sur un bouton dans la zone accordéon. Lorsqu'un utilisateur clique sur le bouton d'envoi de formulaire, l'événement appelle jQuery.post, qui est alors censé appeler une fonction de sauvegarde dans le contrôleur, qui à son tour appelle une fonction de sauvegarde dans le modèle. L'URL de .post est index.php, et je sérialise() les entrées de formulaire - avec les éléments cachés, j'ai la tâche définie sur une fonction de sauvegarde qui se trouve dans le contrôleur, et le contrôleur est également défini.jQuery .post ne pas exécuter la tâche dans l'URL

Le problème est que la tâche de sauvegarde du contrôleur n'est pas appelée lorsque le bouton est cliqué, et que la fonction de sauvegarde sur db n'est pas utilisée dans le modèle. Après que l'utilisateur clique sur le bouton, la page redirige vers index.php (page d'accueil). Pas d'enregistrement dans la base de données.

Toute aide serait grandement appréciée.

éléments de formulaire template.php:

<input type="hidden" name="controller" value="controller" />  
<input type="hidden" name="task" value="saveProgramUI" />' 

js code:

jQuery('#new_program_form').submit(function() { 
    if (jQuery('#new_program_form').valid()) { 
     jQuery.post("index.php", jQuery("#new_program_form").serialize(), function(html){ 
      alert("Data Loaded: " + html); 
     }); 
    } 
}); 

Code Controller:

function saveProgramUI(){ 



    $program = JRequest::get('POST'); 
    $model = & $this->getModel('pfm'); 

    $model->saveProgramUI($program); 


    $resp = "Hello World!"; 

    return $resp; 

} 

Code du modèle:

function saveProgramUI($program) 
{ 

$programTableRow =& $this->getTable('programs'); 
// Bind the form fields to the programs table, save to db 

if (!$programTableRow->save($program)) { 

JError::raiseError(500, 'Error saving program'); 
} 

}

+1

Vous devriez accepter la réponse à vos questions. – SLaks

+0

modèle.éléments de formulaire php: ' – netefficacy

+0

newbie ... comment faire J'accepte la réponse? – netefficacy

Répondre

0

RÉSOLU.

Il s'agissait d'un problème de Joomla, pas de jQuery.

nécessaire pour ajouter cette ligne au fichier composant pour le composant:

$controller->execute(JRequest::getCmd('task')); 

ajouté également la vue view.raw.php et un modèle de mise en page correspondante ainsi.

Cette page a été instructive: http://docs.joomla.org/How_Joomla_pieces_work_together

Je suis nouveau au développement Joomla, alors je suis allé revenir à l'essentiel de comprendre les choses, cette page avait la réponse.

Merci à tous pour vos idées!

1

Ajouter return false; à la fin de votre gestionnaire submit. Sans cela, le navigateur soumettra le formulaire normalement après l'exécution de votre gestionnaire, avant d'avoir la possibilité d'envoyer la demande.

+0

Ok, cela arrête la redirection vers index.php, merci. Mais le .post n'obtient toujours pas la tâche de sauvegarde. Je vais essayer certaines choses. – netefficacy

+0

Encore un peu d'info: la réponse .post contient tout le code html de la page. Semble que la tâche dans le contrôleur n'est pas appelée. – netefficacy

+0

Je ne connais pas Joomla, donc je ne peux pas t'aider là-bas. Vérifiez votre URL. – SLaks

Questions connexes