использование ajax для публикации комментариев в cakephp приводит к ошибке 404, но локально ошибок нет? - PullRequest
2 голосов
/ 05 апреля 2010

Используя ajax helper, созданный для использования с Jquery, я создал форму, которая публикует комментарии в «/ comments / add», и это работает, как и ожидалось, на моем локальном wamp-сервере, но не на моем рабочем сервере.На моем производственном сервере я получаю сообщение об ошибке 404, не могу найти /comments/add'.

Я потратил довольно много времени на поиск разрешения, но безуспешно.Я сосредоточился на том, чтобы попытаться выявить разрыв, но ничего не выскакивает у меня.

Вот некоторые наблюдения:

  • работает, как и ожидалось, на локальном сервере Wamp.
  • requestHandler указан как компонент
  • файлы на локальном и производственном серверах одинаковы
  • папка контроллеров имеет доступ к записи
  • autoLayout и autoRender установленыв false

Вот форма, на мой взгляд:

     <div class="comments form">
     <?php echo $ajax->form('/comments/add', 'tournament', array('url' => '/comments/add', 'update' => 'Comments', 'indicator' => 'commentSaved'));?>
         <fieldset>
             <legend><?php __('Add Comment');?></legend>
             <div id="commentSaved" style="display: none; float: right;">
                <h2>Loading...</h2>
             </div>
         <?php
             echo $form->hidden('Comment.foreign_id', array('value' => $tournament['Tournament']['id']));
             echo $form->hidden('Comment.belongs_to', array('value' => 'Tournament'));
             echo $form->input('Comment.name');
             echo $form->input('Comment.email');
             echo $form->input('Comment.web', array('value' => 'http://'));
             echo $form->input('Comment.content');
         ?>
         </fieldset>

     <?php echo $form->end('Submit');?>
     </div>

А вот контроллер моего комментария добавить действие:

function add() {
   if($this->RequestHandler->isAjax())
   {
           $this->autoLayout = false;
           $this->autoRender=false;
       $this->Comment->recursive =-1;
       $commentInfos = $this->Comment->findAllByIp($_SERVER['REMOTE_ADDR']);
       $spam = FALSE;
       foreach($commentInfos as $commentInfo)
       {
     if ( time() - strtotime($commentInfo['Comment']['created']) < 180)
     {
         $spam = TRUE;
     }
       }

       if ($spam === FALSE)
       {

     if (!empty($this->data)) {
         $this->data['Comment']['ip'] = $_SERVER['REMOTE_ADDR'];
         $this->Comment->create();
         if ($this->Comment->save($this->data)) {

             $this->Comment->recursive =-1;
             $comments = $this->Comment->findAll(array('Comment.foreign_id' => $this->data['Comment']['foreign_id'], 'Comment.belongs_to' => $this->data['Comment']['belongs_to'], 'Comment.status' =>'approved'));

             $this->set(compact('comments'));
             $this->viewPath = 'elements'.DS.'posts';
             $this->render('comments');
         }
     }
       }
       else
       {
             $this->Comment->recursive =-1;
             $comments = $this->Comment->findAll(array('Comment.foreign_id' => $this->data['Comment']['foreign_id'], 'Comment.belongs_to' => $this->data['Comment']['belongs_to'], 'Comment.status' =>'approved'));
             $this->set(compact('comments'));
             $this->viewPath = 'elements'.DS.'posts';
             $this->render('spam');
       }
   }
   else
   {
       $this->Session->setFlash(__('Invalid Action. Please view a post to add a comment.', true));
       $this->redirect(array('controller' => 'pages', 'action'=>'display', 'home'));
   }
     }

Как вы можетевидите, я удостоверился, что 'autoLayout' и 'autoRender' установлены в false, но в Firebug я все еще получаю ошибку 404, заявляющую, что на рабочем сервере не найдено / comments / add.

Я должен такжеУкажите, что я использую jquery, jquery.form и jquery.editable, а также помощник ajax, созданный для использования с jquery.

Любая помощь или даже предложения о том, как устранить неполадку, действительно приветствуется.

Приветствия, Пол

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Оказывается, это было вызвано несколькими последними строками кода, вызвав сеанс, который я не использую в комментариях.

 else
 {
     $this->Session->setFlash(__('Invalid Action. Please view a post to add a comment.', true));
     $this->redirect(array('controller' => 'pages', 'action'=>'display', 'home'));
 }

Извлеченный урок, будьте осторожны с кодом, который вы получаете из учебника. Это может быть то, что вы не используете.

-Поль

1 голос
/ 05 апреля 2010

Вы убедились, что ваши файлы .htaccess присутствуют на рабочем сервере? Если да, установлен ли mod_rewrite и разрешено ли переопределение .htaccess в домашнем каталоге? Кажется, что проблема должна заключаться в некоторой разнице между вашей локальной средой и вашей производственной средой, а не в самом коде.

...