2016-11-22 65 views
0

也许有人可以帮我找到我的错误。jquery调用Cakephp 3控制器

在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 
    } 

} 

这只是虚拟的代码,所以请不要挑剔的阿博UT斯达康它;)

我的问题是,如果我用上面的代码,我会得到一个内部服务器错误,但如果我更改

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 GET http://localhost/anbieter/add-create 500(内部服务器错误)AJAX的

+2

无论何时收到错误,请始终发布** _complete_错误**,即**包括_full_ stacktrace **(理想情况下,从日志中以可正常读取的方式复制),即使问题对熟悉CakePHP的人来说可能很明显!也显示/描述正确的上下文,即显示/突出显示实际触发错误的代码,并且请始终提及您的_exact_ CakePHP版本 - 谢谢! – ndm

回答

0

原则之二:从ajaxed页面

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

嘿谢谢,试过了,还有很多不同的东西......仍然没有工作,足够有趣,即使我从添加复制东西,它不会工作,我想我失去了其他地方的东西。有没有在CakePhp中的任何功能原型? –

+0

控制器操作只能返回'\ Cake \ Network \ Response'实例或'null'。 – ndm

+0

是cakephp路线正确的,你的xhr请求身体怎么样? – madalinivascu

0

您需要设置一些返回的东西查看控制器动作中的变量:

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

正如我在下面提到的,即使我c/p代码添加到addCreate(有或没有autoRender = false)没有工作。 –

+0

你可以发布你收到的错误和error.log – makallio85

0

非常感谢你们。

它似乎一直与旧CakePHP的(3.2?)

我现在更新到3.3.9和所有正常工作的问题。