2016-11-22 1 views
0

Возможно, кто-то может помочь мне найти мою ошибку.jquery вызывает Cakephp 3 Controller

В Cakephp я хотел бы использовать автозаполнение jquery, и когда пользователь выбирает проверку значения с контроллером, если новое значение должно храниться в базе данных или нет.

вот код для просмотра

<?php  
echo $this->Form->input('Name', array(
    'label' => 'Anbieter', 
    'empty' => true, 
    'required' => 'required', 
    'templates' => array(
     'inputContainer' => '{{content}}', 
    ), 
    'class' => 'select anbieter', 
    'id' => 'Anbieter' 
)); 

и сценарий

<script> 
jQuery('#Anbieter').autocomplete({ 
    source:'<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'getAll')); ?>', 
    minLength: 0, 
    autoFill: false, 
    select: function(event, ui) { 
     $.ajax({ 
      url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'addCreate')); ?>', 
      success: function(event, ui){ 
       console.log(ui); 
      }, 
      error: function(event, ui){ 
       console.log(ui); 
      } 
     }); 
    } 
}); 

в контроллере я это

public function add() 
{ 
    $this->viewBuilder()->layout('other'); 
    $anbieter = $this->Anbieter->newEntity(); 
    if ($this->request->is('post')) { 
     $anbieter = $this->Anbieter->patchEntity($anbieter, $this->request->data); 
     if ($this->Anbieter->save($anbieter)) { 
      $this->Flash->success(__('The anbieter has been saved.')); 
      return $this->redirect(['action' => 'index']); 
     } else { 
      $this->Flash->error(__('The anbieter could not be saved. Please, try again.')); 
     } 
    } 
    $this->set(compact('anbieter')); 
    $this->set('_serialize', ['anbieter']); 
} 

public function addCreate() 
{ 
    if($this->request->is('ajax')){ 
     // do nothing for now 
    } 

} 

это просто манекен код, пожалуйста Не будьте придирчивыми abo ут его;)

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

url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'addCreate')); ?>' 

в

url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'add')); ?>', 

все работает отлично. .. , но это не то, что я хочу, так что мне не хватает?

большое спасибо в продвинутом состоянии

l.b.

редактировать: ошибка toolbar.js: 90 ПОЛУЧИТЬ http://localhost/anbieter/add-create 500 (Внутренняя ошибка сервера)

+2

Всякий раз, когда вы получаете ошибки, всегда указывайте ** ошибку _complete_ **, то есть **, включая _full_ stacktrace ** (идеально скопированную из журналов, где она доступна с возможностью чтения), даже если проблема может быть очевидным для людей, знакомых с CakePHP! Также показать/описать правильный контекст, то есть показать/выделить код, который фактически вызывает ошибку, и, пожалуйста, всегда упоминайте свою версию _exact_ CakePHP - спасибо! – ndm

ответ

0

Правило номер 2 Аякса: вернуть что-то из ajaxed страницы

if($this->request->is('ajax')){ 
     return json_encode(['message'=>'Sucess']) 
    } 
+0

эй, спасибо, пробовал это и много разных вещей ... все еще не работает, достаточно смешно, даже если я скопирую материал из add в addCreate, он не будет работать, я думаю, что у меня что-то отсутствует. Есть ли где-нибудь функции прототипа в CakePhp? –

+0

Действия контроллера могут возвращать только экземпляры '\ Cake \ Network \ Response' или' null'. – ndm

+0

правильный путь к трюкам, как ваш трэш-запрос нужен? – madalinivascu

0

Вам нужно установить что-то для просмотра переменных в действии вашего контроллера:

$this->set('results', ['foo' => 'bar'])); 
$this->set('_serialize', 'results'); 
+0

, как я упоминал ниже, даже если я c/p код из add to addCreate (с или без autoRender = false) Он выиграл Не работай. –

+0

Не могли бы вы выслать полученную вами ошибку и error.log – makallio85

0

спасибо большое всем вам.

, кажется, были проблемы со старыми CakePHP (3,2.?)

я теперь обновленный до 3.3.9 и все работает отлично.