2017-04-21 92 views
0

我正在向我的控制器发出ajax请求。这里是我的代码:CakePHP 3和jQuery Ajax

$.ajax({ 
       type:"POST", 
       async: true, 
       cache: false, 
       url:"<?php echo \Cake\Routing\Router::url(array('controller'=>'Organizations','action'=>'add', 'ext' => 'json'));?>", 
       beforeSend: function(xhr) { 
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
       }, 
       success: function(tab){ 
        $("#users acronymTable").append("<tr>" + 
         "<td>" + acronym.val() + "</td>" +   
         "<td>" + definition.val() + "</td>" + 
         "</tr>"); 
       }, 
       error: function (tab) { 
        alert('error' + tab.statusText); 
       } 
      }); 

MyController.php:

class OrganizationsController extends AppController 
{ 

    public function initialize(){ 
     parent::initialize(); 
     $this->loadComponent('RequestHandler'); 
    } 
public function add() 
    { 
     $this->layout = null; 

     if ($this->request->is('post')) { 

     // result can be anything coming from $this->data 
     $result = 'Hello Dolly!'; 
     $this->set("result", $result);   

     } 
    } 
} 

的问题是,这并没有返回一个字符串,而是返回一个错误页面。如果我查看错误页面,错误是:

Missing Template:Error:未找到OrganizationsController :: add()的视图。

虽然确实没有add.ctp文件,但它不应该试图找到要返回的视图,因为我只希望它返回单个字符串。我错过了某个地方的设置吗?

谢谢

+0

要么使用[阿贾克斯(HTTPS ://github.com/dereuromark/cakephp-ajax)插件,或者按照关于如何通过_serialize和JsonView提供浏览的文档。 – mark

回答

3

您需要有一个观点,应该发送$结果。如果你不想要一个视图关闭自动渲染$this->autoRender = false;,否则创建add.ctp或声明与$this->render('other_view');

不同的意见注意到NDM

Always either render a template, use a serialized data view, or prepare and return a response object

+0

请不要在控制器中回显数据**!这会弄乱测试环境,并且头部问题也可能发生。总是呈现模板,使用序列化的数据视图,或者准备并返回响应对象! – ndm

+0

你是对的,坏主意编辑答案。 – Derek

+0

是的,在这种情况下,我不想创建一个视图,因为我只想返回一个数据对象(json)。添加$ this-> autoRender = false;工作,但我应该如何返回我的数据对象? – jason