2014-02-18 74 views
1

我把这个添加动作在我spoutnik控制器一样的CakePHP的REST文档:POST:angularjs应用CakePHP的网站

public function add() { 

    $this->layout = null; 
    $this->autoRender = false; 

    if ($this->Spoutnik->save($this->request->data)) { 
     $message = array(
      'text' => __('Saved'), 
      'type' => 'success' 
     ); 
    } else { 
     $message = array(
      'text' => __('Error'), 
      'type' => 'error' 
     ); 
    } 
    $this->set(array(
     'message' => $message, 
     '_serialize' => array('message') 
    )); 

} 

我把这个JS部分在我angularjs应用程序(实际上不是一个其他域CakePHP的网站):

<form ng-controller="MessageController" ng-submit="createMessage()"> 

    <legend>Create Message</legend> 

    <label>Title</label> 
    <input type="text" id="name" name="name" ng-model="message.name" placeholder="Title"> 

    <label>Message</label> 
    <input type="text" id="email" name="email" ng-model="message.email" placeholder="ur message here"> 

    <button class="btn btn-primary">Add</button> 

</form> 

function MessageController($scope, $http) { 
    $scope.message = {}; 
    $scope.createMessage = function() { 
     $http({ 
      method : 'POST', 
      url : 'http://www.mycakephpdomain.com/spoutnik/add', 
      data : $scope.message 
     }) 
    } 
} 

没有工作...我有在Chrome控制台没有错误,我很牛逼完全失去了:/我只想在没有Java或PHP的angularjs中构建一个android应用程序,并发布到我的cakephp网站。目前,我尝试发表一个其他域(我无法触摸apache配置)。

我的代码有什么问题?

+0

我错了?请帮忙 – JoDoaa

回答

0

只是为了记录和调试目的:

我没有找到原因这个同样的问题,但希望通过AngularJS完成的AJAX请求,我发现从形式消息数据没有被发送作为常规形式的数据。相反,它是作为请求付费发送的。

事实上,从服务器的响应只是从我的观点JSON响应之前包含在此错误:

Warning (4096): Argument 1 passed to Hash::get() must be of the type 
array, null given, called in 
/var/www/test/lib/Cake/Network/CakeRequest.php on line 866 and defined 
[CORE/Cake/Utility/Hash.php, line 44] 

当然,我检查,有什么奇怪的在我身边执行,我甚至尝试禁用所有安全组件并允许AUTH *。

如果设置在PHP 0 core.debug,不会被显示的错误和 一切都会好起来,但那不是你想要什么,你真棒 应用。*

我将$ scope.message中的查询数据更改为$('form')。serialize(),但仍然没有办法。 所以最后,我发现的唯一的解决办法是删除$ http.post和非常清楚$。阿贾克斯(),它只是做了自己的工作一如既往...

所以,这就是我的建议替换,删除$ http.post和用户常用的jQuery.ajax();

0

有新人当中很大的混乱,以AngularJS至于为什么$ http服务速记功能($ http.post(),等)不似乎是交换与jQuery的当量(jQuery.post ()等)不同之处在于jQuery和AngularJS如何序列化和传输数据。从根本上说,问题在于你选择的服务器语言本身无法理解AngularJS的传输......默认情况下,jQuery使用Content-Type传输数据:x-www-form-urlencoded和熟悉的foo = bar & baz = moe序列化。然而,AngularJS使用Content-Type:application/json和{“foo”:“bar”,“baz”:“moe”}来传输数据,JSON序列化不幸的是一些Web服务器语言 - 特别是PHP--本身并没有反序列化。

所以具体地说,你的$ _POST变量是空的!

要经过这个问题是有解决方案2:

这里我没有发明什么,只是联... 希望它会有所帮助。