2016-03-22 24 views
1

タイトルが示すように、Angularの$ httpオブジェクトを使用してAJAX呼び出しを作成しようとしています。リクエストの本文にJSONを送信する投稿リクエストを送信したいと思いますが、URLにクエリ文字列が追加されています。 $ httpのドキュメントを最後まで読んでから、SOの答えをサーフィンして、いくつかの異なる設定を試してみてください。パラメータを正しく渡す方法はまだ分かりません。現在、私のAPIは空のJSONまたはBad Request(400)のいずれかで応答します。

コード

function inviteStaff (json) { 
    authToken = service.getAuthToken(); 
    return $http({ 
     method: 'POST', 
     url: baseUrl + '/invitations' + '?authToken=' + authToken, 
     data: JSON.stringify(json), 
     headers: { 
      'Content-type': 'application/json' 
     } 
    }); 
} 

消費関数

self.invite = function ($form) { 
    self.showLoader = true; 
    InvitesService.inviteStaff($scope.inviteModel).then(function() { 
     $form.$setPristine(); 
     $scope.inviteModel.timestamp = new Date(); 
     $scope.invites.unshift($scope.inviteModel); 
     $scope.inviteModel = self.createNewInvite(); 
     self.showLoader = false; 
    }, 
    function() { 
     self.showLoader = false; 
    }); 
}; 

要求ログ

data: "authToken=********&t=*****" // this is weird because it adds another "t" parameter to this query string here 
headers: Object 
    Accept: "application/json" 
    Accept-Language: "en" 
    Content-type: "application/json" 
    authToken: "*********" // just the token here 
    __proto__: Object 
method: "POST" 
params: Object 
timeout: Object 
transformRequest: Array[1] 
transformResponse: Array[1] 
url: "http://****.****.com:****/doctors/invitations?authToken=*****" 
__proto__: Object 

ParamのJSONオブジェクト

{ 
    accountType: "LEAD_DOCTOR", 
    firstName: "kraken", 
    lastName: "lastName", 
    email: "[email protected]" 
} 

誰もこれがどのように動作するかを上の小さな光を当てることができますか? jsonオブジェクトをデータまたはパラメータに渡しますか?データフィールドでJSON.stringifyを使用する必要がありますか?場合によっては、人々が空の文字列をデータに渡していることも確認しました。

私はチャールズプロキシ経由でも実行しています。私が望むものに非常に近づくことができますが、なんらかの理由でJSONテキストフィルタをJSONフィルタではなくクエリ文字列として表示しています。

いずれかのアイデアが役に立ちます。私は$ resourceツールを使用するためにリファクタリングとアップグレードを行いますが、私たちは締め切り期限が迫っており、今のところこれを稼働させたいだけです。あなたがより多くの情報を必要とするかどうかを教えてください。

UPDATE 私たちはAPIを文書化するためにswaggerを使用しています。実際にはUIのエンドポイントにヒットすることができます。次のCURLコマンドが生成されます。私はそれが問題を見つけるのを助けるかもしれないと思った。

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{ 
    \"firstName\": \"string\", 
    \"lastName\": \"string\", 
    \"email\": \"[email protected]\", 
    \"accountType\": \"CLIENT\" 
}" "http://*****.****.com:****/doctors/invitations?authToken=***obfuscatedAuthToken***" 
+1

ここでは何が問題ですか? –

+1

2番目の質問:javascriptオブジェクト全体を渡すことができます。Angularはそれを処理します – dex

+0

@MB私は質問 – Kraken

答えて

0

我々は他の場所で、コンテンツタイプを変更したコードベースでHTTPインターセプタ機能を持っていました!条件付きでそれをラップし、今行くのは良いです。私のコードが正しく書かれていることを確認してくれた皆さん、ありがとう!

2

私はヘッダフィールドを利用するためにあなたをお勧めします:

function inviteStaff (json) { 
authToken = service.getAuthToken(); 
return $http({ 
    method: 'POST', 
    url: baseUrl + '/invitations', 
    data: JSON.stringify(json), 
    headers: { 
     'Content-type': 'application/json', 
     'authToken': authToken 
    } 
    }); 
} 

そして、サーバ側で、authTokenののヘッダ値のために現在のリクエストをお願いいたします。

あなたの読書のために、URL内のトークンは、いくつかのセキュリティ上の懸念を持って渡す:それは結局のところhttps URL with token parameter : how secure is it?

+0

"私たちは厳しい締め切りを迎えており、今のところこれを手に入れたい" - あなたの提案は有効ですが、OPが何を求めているのかはわかりません – Brett

+0

@Brettは鼻の上にあった。しかし、将来のための非常に有用なアドバイス。ありがとう!近いうちにセキュリティを強化する予定です。 – Kraken

関連する問題