Подтвердить что ты не робот

Как сделать запрос POST jsonp, который задает contentType с помощью jQuery?

Мне нужно сделать запрос 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?

4b9b3361

Ответ 1

Невозможно выполнить запрос JSONP POST.

JSONP работает, создавая тег <script>, который выполняет Javascript из другого домена; невозможно отправить запрос POST с помощью тега <script>.

Ответ 2

Используйте 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" );

Ответ 3

Там (взломать) решение я сделал это много раз, вы сможете отправлять сообщения с 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 (та же политика происхождения), но кому это нужно?