コンテンツタイプ「application/json」でjsonp POSTリクエストを行う必要があります。次のようにサーバーへのPOSTリクエストを取得できます。
jQuery.ajax({
type: 'POST',
url: url,
data: data,
success: success,
error: error,
async: true,
complete: complete,
timeout: TIMEOUT,
scriptCharset: 'UTF-8',
dataType: 'jsonp',
jsonp: '_jsonp',
});
しかし、次の行を追加するとすぐに_contentType: "application/json"
、POSTではなくOPTIONSリクエストとして送信を開始します。
コンテンツタイプを指定し、リクエストをPOSTとして送信するにはどうすればよいですか?
JSONP POSTリクエストを作成することはできません。
JSONPは、異なるドメインからJavascriptを実行する<script>
タグを作成することにより機能します。 <script>
タグを使用してPOST=リクエストを送信することはできません。
json
でdataType
を使用し、次のように送信します。
$.ajax({
url: "your url which return json",
type: "POST",
crossDomain: true,
data: data,
dataType: "json",
success:function(result){
alert(JSON.stringify(result));
},
error:function(xhr,status,error){
alert(status);
}
});
サーバー側のファイルに次の行を追加します。
if [〜#〜] php [〜#〜]:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
if Java:
response.addHeader( "Access-Control-Allow-Origin", "*" );
response.addHeader( "Access-Control-Allow-Methods", "POST" );
response.addHeader( "Access-Control-Max-Age", "1000" );
私が何度もやってきた(ハック)ソリューションがあります。JsonPで投稿できます。 (GETで使用できるよりも大きい2000文字を超えるフォームを投稿できます)
クライアントアプリケーションJavascript
$.ajax({
type: "POST", // you request will be a post request
data: postData, // javascript object with all my params
url: COMAPIURL, // my backoffice comunication api url
dataType: "jsonp", // datatype can be json or jsonp
success: function(result){
console.dir(result);
}
});
Java:
response.addHeader( "Access-Control-Allow-Origin", "*" ); // open your api to any client
response.addHeader( "Access-Control-Allow-Methods", "POST" ); // a allow post
response.addHeader( "Access-Control-Max-Age", "1000" ); // time from request to response before timeout
PHP:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
このようにして、投稿リクエストに対してサーバーを開いているので、identまたは何か他のものを提供することでこれを再保護する必要があります。
この方法では、リクエストタイプをjsonpからjsonに変更することもできます。両方とも機能し、正しいレスポンスコンテンツタイプを設定するだけです
jsonp
response.setContentType( "text/javascript; charset=utf-8" );
json
response.setContentType( "application/json; charset=utf-8" );
サーバーがSOP(同じOriginポリシー))をこれ以上尊重しないことに注意してください。