Ответ 1
Невозможно выполнить запрос JSONP POST.
JSONP работает, создавая тег <script>
, который выполняет Javascript из другого домена; невозможно отправить запрос POST с помощью тега <script>
.
Мне нужно сделать запрос POST jsonp с типом контента 'application/json'. Я могу получить запрос 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"
, она начинает отправлять ее как запрос OPTIONS, а не POST.
Как я могу указать тип контента и отправить запрос как POST?
Невозможно выполнить запрос JSONP POST.
JSONP работает, создавая тег <script>
, который выполняет Javascript из другого домена; невозможно отправить запрос POST с помощью тега <script>
.
Используйте 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. (Вы сможете отправить форму, большую, чем 2000 char, чем вы можете использовать GET)
Клиентское приложение 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');
Таким образом, вы открываете свой сервер для любого почтового запроса, вы должны его повторно защитить, предоставив идентификатор или что-то еще.
С помощью этого метода вы также можете изменить тип запроса с jsonp на json, оба работают, просто установите правильный тип содержимого ответа
JSONP
response.setContentType( "text/javascript; charset=utf-8" );
JSON
response.setContentType( "application/json; charset=utf-8" );
Пожалуйста, не то, что вы сервер больше не будете уважать SOP (та же политика происхождения), но кому это нужно?