2010-02-10 24 views
2

je suis en train de faire une forme simple qui ajoute un nouveau commentaire en utilisant ajax pour un billet de blog (en fait cela fait partie d'un tutoriel CakePHP)problème CakePHP formulaire ajax base

mais le problème est que le bouton soumettre ne rien faire du tout

ici est la partie du code qui génère la forme dans le view.ctp fichier

<?php echo $ajax->form('/comments/add', 'post', array('url' => '/comments/add', 'update' => 'PostsComments', 'indicator' => 'commentSaved'));?> 
<fieldset> 
    <legend><?php __('Add Comment');?></legend> 
     <?php 
      echo $form->hidden('Comment.post_id', array('value' => $post['Post']['id'])); 
      echo $form->input('Comment.name'); 
      echo $form->input('Comment.content');        
     ?> 
</fieldset> 
<?php echo $form->end('Submit');?> 

et voici l'action de commentaires Ajouter dans la comments_controller.php

if (!empty($this->data)) { 
    $this->Comment->create(); 
    if ($this->Comment->save($this->data)) { 
     $comments = $this->Comment->find('all',array('conditions'=>array('post_id'=>$this->data['Comment']['post_id']),'recursive'=>-1)); 
     $this->set(compact('comments')); 
     $this->render('add_success','ajax'); 
    } else { 
     $this->render('add_failure','ajax'); 
    } 
}  

le problème est que l'action add n'appelle pas de la vue ... quand je considérais le code source html généré j'ai trouvé quelque chose comme ça

<form id="form304217296" onsubmit="event.returnValue = false; return false;" method="post" action="/php-cake/blog/comments/add"><fieldset style="display:none;"> 

si je supprimé le sur soumettre étiquette manuellement, l'action est appelée, mais le fichier add_success.ctp est généré en tant que nouvelle page et non en tant qu'appel ajax.

alors quel pourrait être le problème?

Répondre

3

enfin j'ai découvert le problème

il y avait plus d'une erreur dans le tutoriel (chapitre 8 CakePHP du débutant au professionnel) après la fixation de ces erreurs je l'ai trouvé un autre problème est que CakePHP v1.2.6 est pas compatible avec la dernière version du prototype (v1.6.1) car il donne l'erreur suivante dans firebug

Event.observe is not a function 

donc j'utiliser la version 1.6.0.3 du prototype et le problème a été résolu.

pour une liste d'erreurs dans ce chapitre voir this

0

Incluez-vous le prototype et scriptaculus dans votre vue/mise en page (les deux sont nécessaires pour l'assistant Ajax)? En outre, il pourrait y avoir une interférence avec jquery si vous utilisez que trop

+0

oui iam utilisant la bibliothèque prototype, mais je l'avais mis en application/Webroot/js pas dans le dossier vue/mise en page aussi je na pas utiliser scriptaculus que je pense ce n'est pas nécessaire pour cette forme simple? droite ? –

+0

Je ne suis pas sûr de scriptaculus (mais je pense que vous n'en avez pas besoin pour tout appel ajax). Ce que je voulais dire par inclure dans votre vue/mise en page: avez-vous un $ javascript-> lien («prototype»); n'importe où dans votre vue ou dans votre mise en page, de sorte que dans le code source il y ait un