JQuery PUT / POST ajax CORS запросы без аргументов данных - PullRequest
1 голос
/ 21 марта 2012

Я испытываю странную проблему с запросами CORS ajax PUT и POST в jQuery, когда не передается никаких параметров данных.

Поэтому я включил CORS на своем сервере, установив заголовки.Все работает нормально, когда я делаю, например:

$.ajax({
  url: "http://127.0.0.1/R/index.html",
  type: "PUT",
  data: {foo:"bar"}
});

Однако, когда я делаю тот же запрос без установки параметра data, firefox возвращается без отправки ajax:

$.ajax({
  url: "http://127.0.0.1/R/index.html",
  type: "PUT"
});

Обратите внимание, что это происходит только для методов POST и PUT, когда в запросе указан полный URL-адрес и не указаны параметры http-данных.Это также происходит, когда URL-адрес находится в том же домене, что и сама страница (следовательно, CORS не требуется).Это не произойдет, если я просто укажу путь в URL, а не полный URL.

Любые подсказки, как я могу сделать POST / PUT без передачи каких-либо параметров (мой сервер не будет принимать «поддельные» параметры).

1 Ответ

5 голосов
/ 23 марта 2012

Я почти уверен, что это ошибка в jQuery, когда он вызывает кодировщик 'multipart / form-data' в междоменных запросах ajax, когда нет опубликованных данных.

Этого можно избежать, используя что-то вроде этого:

if(jQuery.isEmptyObject(mydata)){
    $.ajax({
        url: "http://127.0.0.1/R/index.html",
        type: "PUT",
        contentType: 'application/x-www-form-urlencoded'
    });
} else {
    $.ajax({
        url: "http://127.0.0.1/R/index.html",
        type: "PUT",
        data: mydata
    });
}
...