2016-10-13 11 views
0

サービスでデータを渡すときに、サービスを削除するときに角度のjsで作業しています。これは400の悪いリクエストエラーを表示しています。これは私のサービスを呼び出すjsです。Angular jsサービスを削除するためにデータを渡す方法は?

$scope.deleteUser = function(id){ 
    var data = 'Id='+id; 

    DataService.deleteUser(data).then(function successCallback(response) { 
     console.log('deleted'); 
    }, function errorCallback(response) { 
      console.log(response); 

    }); 

} 

これは、ユーザーを削除するサービスです。

service.deleteUser = function(data){ 
       var config = { 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
         'X-Auth-Token': 'mytoken' 
        } 
       }; 
       return $http.delete(mainURL + '/users', data, config); 
}; 

これは私がデータを渡す必要がカールAPI要求される:

curl -v -H "X-Auth-Token: mytoken" -X DELETE -F Id=665799088 http://<ipaddress>/users

+0

$ httpサービスのdocumention [delete method](https://docs.angularjs.org/api/ng/service/$http#delete)によれば、2つのパラメータ、url、configのみが受け入れられます。つまり、あなたのデータは現在configのように扱われます。あなたは、ほとんどの場合、あなたの設定オブジェクトにいくつかのparamsオプションを渡そうとしています。 – nubinub

+0

APIで「Id」をどう受け入れていますか?あなたは要求の本文からそれを得ていますか? –

+1

また、あなたがこれを手にしているかどうかはわかりませんが、IDが '/ users/id'の削除のようなURLの一部であればもっと正しいと思います。 – nubinub

答えて

0

$ http.deleteへの第二パラメータが設定なので、あなたのようにconfigオブジェクトを渡す必要があります2番目のパラメータであり、データではありません。

DELETEメソッドの型はリクエスト本体を受け入れないため、IDをデータとして渡すべきではありません。代わりに

return $http.delete(mainURL + '/users?Id='+data, config); 

この

あなたのサービスの利用にしたがって、この http://main_url/users?Id=id

を試してみてください。また、あなたのAPIにIDを渡しているか確認してください。クエリパラメータとしてIDを渡している場合、上記は機能しますが、ルートパラメータとして渡しても上記のURLは機能しませんが、CURL式からクエリ文字列にIDを渡していると思いますルートパラメータとしてではありません。

+0

私はクエリ文字列としてIDを渡すためにそれをテストしました。私はコマンドプロンプトでcurlサービスをヒットした後、エラーなしで応答を返します。 –

+0

上記のように削除状態を変更しても、悪い要求が届いていますか?あるいは、$ http.delete(mainURL + '/ users /' + data、config)を返してください。一部のAPIでは、IDをデフォルトのルートパラメータとして使用します。 –

+0

'/ users'でdeleteメソッドが不可能だった場合、リターンコードはおそらく405のようになります。 – nubinub

0

documentationによると$httpサービスでは、削除方法は2つのパラメータurlとconfigのみを受け入れます。つまり、データは現在configのように扱われています。あなたは、ほとんどの場合、あなたの設定オブジェクトにいくつかのparamsオプションを渡そうとしています。

DataService.deleteUser(id).then(function successCallback(response) { 
    console.log('deleted'); 
}, function errorCallback(response) { 
     console.log(response); 

}); 

あなたのサービス宣言はもっと似ているはずです。

service.deleteUser = function(id){ 
       var config = { 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
         'X-Auth-Token': 'mytoken' 
        }, 
        params : { 
         id : id 
        } 
       }; 
       return $http.delete(mainURL + '/users', config); 
      }; 

また、あなたがAPIを担当している場合/users/idのように見えるパスが、より正確であることに留意してください。

+0

これは、URLに安全な情報を置くことについても注意が必要です。 IDがSSNのようなものであれば、HTTPSを使用していても、この情報は複数のシステムにプレーンテキストとしてログオンします。 – Enzey

+0

私はconfigでparamsを渡そうとしましたが、Firebugのエラー "No 'Access-Control-Allow-Origin'ヘッダが要求されたリソースに存在しています。 –

+0

次に、あなたの設定ヘッダ属性に 'Access-Control-Allow-Origin'を追加することができます。 – nubinub

関連する問題