2014-01-15 55 views
2

我正在嘗試使用$ http.post測試發佈數據到服務器。後端是用laravel構建的。

我剛剛學習Angular,所以沒有任何複雜的事情發生。當我嘗試發佈到/ api,並在瀏覽器控制檯中出現404錯誤時。如果我在瀏覽器中打開URl,它確實存在。該頁面本身只是返回一些JSON。

這裏的HTML:

<ul> 
    <li ng-repeat="brand in brands"> 
     <input type="checkbox" name="{{brand.brand_name}}" ng-model="brand.checked" ng-change="getSelectedBrands()"> 
     {{ brand.brand_name }} 
    </li> 
</ul> 

和控制器的負責公佈的數據部分:

$scope.getSelectedBrands = function() { 
    var data = $filter('filter')($scope.brands, {checked: true}); 
    $http.post('/api', data).success(function(data, status, headers) { 
     //do something 
    });   
} 

爲什麼在每一個複選框,選中或取消選中職位是這些複選框將被過濾一旦我到達該階段,數據庫的結果。

任何幫助將不勝感激。

謝謝!

隨着網絡TAB結果編輯: Network Tab

+0

你能在devtools打開網絡選項卡,並告訴我們的要求嗎? –

+0

您沒有分享您的服務器端代碼,但請閱讀http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/。或者我的博客文章介紹Coldfusion的類似問題:http://www.jeffryhouser.com/index.cfm/2013/10/1/Calling-a-ColdFusion-CFC-from-AngularJS我建議你使用包嗅探器來查看從您的用戶界面發送到服務器的內容。如果你和我有同樣的問題,那麼這是你的解決方案:'$ http.defaults.headers.post ['Content-Type'] ='application/x-www-form-urlencoded; charset = UTF-8';' – JeffryHouser

+0

@IlanFrumer在網絡標籤中添加了一個屏幕截圖來解決我的問題。謝謝 – BarryWalsh

回答

4

如果你在瀏覽器中打開URI你執行的是GET請求。可能你的後端設置爲響應GET路由而不是POST。

+0

噢,就是這樣。不能相信這是一個簡單的錯誤。謝謝你的幫助! – BarryWalsh

2

按照傑夫的評論,你可能需要添加以下到您的控制器

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';