2016-10-18 12 views
1

1つのAPIをヒットしようとしていますが、マルチパートデータを使用してHTTP POSTリクエストを行っていますが、400リクエストが間違っています。HTTPマルチパートリクエストで400のリクエストエラーが発生しました。

var reqPayload='{ 
    "param1":"value1" 
}'; 

var ajaxOptions = { 
      url: href, 
      type: method_NAME, 
      async: true 
}; 
ajaxOptions.data = new FormData(); 
ajaxOptions.data.append("jsonInputParameters", $.parseJSON(reqPayload)); 

ajaxOptions.contentType = false; 
ajaxOptions.processData = false; 

//following will not create any problem since there is only 1 file. 
$.each($('#id_NAME input[type="file"]')[0].files, function(i, file) { 
    ajaxOptions.data.append('primaryFile', file); 
}); 

私の要求は、次のようになります。

------WebKitFormBoundary9hoSobTAHgGksFST 
Content-Disposition: form-data; name="jsonInputParameters" 

[object Object] 
Content-Disposition: form-data; name="primaryFile"; filename="example.txt" 
Content-Type: text/plain 

------WebKitFormBoundary9hoSobTAHgGksFST 

しかし、私が欲しいのはこれです:

------WebKitFormBoundary9hoSobTAHgGksFST 
Content-Disposition: form-data; name="jsonInputParameters" 

{ 
"parentID":"FB4CD874EF94CD2CC1B60B72T0000000000100000001" 
} 

------WebKitFormBoundary9hoSobTAHgGksFST 
Content-Disposition: form-data; name="primaryFile"; filename="example.txt" 
Content-Type: text/plain 

<File Content> 
------WebKitFormBoundary9hoSobTAHgGksFST-- 

私はこれを発行するために、いくつかの回避策を教えてください問題。

答えて

1

reqPayload変数は文字列なので、まったくシリアル化する必要はありません。あなたがオブジェクトとしてペイロードを作成し、作成する前に、データをシリアル化するためにJSON.stringifyを使用する場合、それははるかに良い練習だ、

ajaxOptions.data.append("jsonInputParameters", reqPayload); 

言った、および保守が容易:あなただけのように、あるFormDataに付加することができます

+0

ただし、変数reqPayloadはすでに文字列形式です。では、どうすればこの問題を解決できますか? – Vishwanath

+0

また、Stringの代わりにオブジェクトを送る必要があります。 – Vishwanath

+0

良い点。その場合は、エンコードせずに直接FormDataに追加してください。 –

関連する問題