2016-08-04 12 views
0

フォームを送信しようとすると405エラーが発生します。ここに私のコントローラがあります:Angular.jsフォームPOSTエラー405が返されないメソッド

'use strict';

angular. 
    module('myApp'). 
    component('zipPopup', { 
     templateUrl: 'zip-popup/zip-popup.template.html', 
     controller: function ZipPopupController($scope, $http) { 
      $scope.show = true; 
      $scope.hide = function(){ 
       $scope.show = false; 
      }; 
      $scope.user = {}; 
      $scope.regex = '\\d{5}'; 

      $scope.submitForm = function(isValid) { 
       if(isValid) { 
        $http({ 
         method : 'POST', 
         url  : '/leads', 
         data : $scope.user, 
         headers : {'Content-Type': 'application/x-www-form-urlencoded'} 
        }) 
        .success(function(response) { 
         $scope.show = false; 
        }) 
        .error(function(response) { 
         console.log(response); 
        }); 
       } 
      }; 
     } 
    }); 

HERESに私の見解:

<div class="zip-popup text-center"> 
    <div class="popup-container"> 
     <form name="zipForm" class="zip-form" ng-submit="submitForm(zipForm.$valid)" novalidate> 
      <input ng-model="user.zipCode" ng-pattern="regex" name="zipCode" class="form-control text-center" placeholder="Your Zip" required /> 
      <p class="error" ng-show="zipForm.zipCode.$invalid && !zipForm.zipCode.$pristine">A 5 digit zip code is required.</p> 
      <button type="submit" class="btn btn-block" ng-disabled="zipForm.$invalid">Submit</button> 
     </form> 
    </div> 
</div> 

異なるファイルまたは私はこれが起こることを許可するように変更する必要があるものがありますか?私は何が欠けていますか?

+0

あなたは正しいと確信していますか?すなわち、 'url: '/ leads''。これはapi呼び出しですか? –

+0

/leadsはフォームデータを処理するためにローカルになります – Dubster

答えて

1

サーバーは、特定のメソッド(などGETPOSTPUTPATCHDELETEは、)サーバーで受け入れることができないことを語っています。これは、APIルート/エンドポイントにPOSTメソッドが設定されていないためです。

例えば、ExpressJSには、次の操作を実行してPOSTを受け入れるルートを設定する必要があるだろう:

app.post('/leads', function (req, res) { 
    res.send('POST request to the homepage'); 
}); 

405 Method Not Allowedエラー、click hereの詳細については。

+0

私はそれがこのようなものだと考えました。私はちょうど角度を使ってPOSTを受け入れるように経路を設定する方法を確信しています。 – Dubster

+0

'$ http'リクエストで既にPOSTを送信しています。問題は、角ではなく、あなたのAPIにあります。あなたのAPIはどの言語やフレームワークで書かれていますか? – Soviut

+0

これはおそらく実際の問題です。私はまだフォームハンドラを設定していません。 – Dubster

0

私は数週間前に同様の問題がありました。サーバーはヘッダ内の特定のタイプの'Content-Type'を受け入れるだけだったことが判明しました。しかし、アプリケーション/ JSONにContent-Typeを変更

はこの問題を解決:

$http({ 
    method : 'POST', 
    url  : '/leads', 
    data : $scope.user, 
    headers : {'Content-Type': 'application/json'} 
}) 
.success(function(response) { 
    $scope.show = false; 
}) 
.error(function(response) { 
    console.log(response); 
}); 

P.S.私はこれがあなたの問題を必ず解決すると言っているわけではありませんが、これはこの種の問題に関連する解決策です。あなたのサーバーが期待している入力の種類を調べるだけです。


EDIT

私はContent-Typeとして'application/json'を送信するためには言いませんよ。私が言っているのは、どのタイプのコンテンツが受け入れ可能であるかを見つけて、そのタイプのヘッダーを送信することです。

+0

これは '405 Method Not Allowed'とは異なるエラーを返します。おそらくあなたは '406 Not Acceptable'を考えているでしょうか? – Soviut

+0

私は、 'Content-Type'として' application/json'を送るつもりはありません。私が言っているのは、どんなタイプのコンテンツが受け入れ可能であるかを見出し、そのタイプのヘッダーを送信することです** ** –

+1

コンテンツの種類は関係ありません。コンテンツタイプが受け入れられないと、405エラーではなく406エラーが発生します。 – Soviut

関連する問題