2014-02-18 95 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:

這裏我沒有發明什麼,只是聯... 希望它會有所幫助。