работает стандартный XMLHttpRequest, но не jQuery $ .ajax при отправке службы REST - PullRequest
1 голос
/ 14 марта 2012

Я хочу сделать POST для службы REST.При использовании стандартного XMLHttpRequest-метода это работает, но при использовании jQuery $ .ajax заголовки HTTPRequest портятся, и POST становится OPTIONS.

Я новичок в jQuery и HTTP, поэтому я мог пропуститьчто-то очевидное:)

Это работает:

function sendPostXMLHTTP() {
    var jData = { "Name": "Olle" };

    var client = new XMLHttpRequest();
    client.open("POST", "http://localhost:8383/DEMOService/TestPost");
    client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    client.send(JSON.stringify(jData));
}

Это не работает:

function sendPostAjax() {
    var jData = { "Name": "Olle" };

    $.ajax({
        type: 'POST',
        url: 'http://localhost:8383/DEMOService/TestPost',
        contentType: "text/plain;charset=UTF-8",
        data: JSON.stringify(jData)
    });
}

HTTPRequest, сгенерированный из sendPostXMLHTTP () ( correct ):

POST http://localhost:8383/DEMOService/TestPost HTTP/1.1
Host: localhost:8383
Connection: keep-alive
Content-Length: 15
Origin: http://localhost:9990
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Content-Type: text/plain;charset=UTF-8
Accept: */*
Referer: http://localhost:9990/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"Name":"Olle"}

HTTPRequest, сгенерированный из sendPostAjax () неверный :

OPTIONS http://localhost:8383/DEMOService/TestPost HTTP/1.1
Host: localhost:8383
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:9990
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Access-Control-Request-Headers: Origin, X-Requested-With, Content-Type, Accept
Accept: */*
Referer: http://localhost:9990/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Почему путь «jQuery $ .ajax» поворачивает POSTв ОПЦИИ, и почему тело запроса исчезает?

// Patrik

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Попробуйте:

var jData = {name:'Olle'};
  $.ajax({
  url : 'http://localhost:8383/DEMOService/TestPost',
  type : 'POST',
  data : jData
});

Данные всегда будут передаваться на сервер с использованием кодировки UTF-8;Вы должны декодировать это соответствующим образом на стороне сервера.Смотри также API

0 голосов
/ 14 марта 2012

jQuery предполагает, что вы выполняете запрос Cross-Origin Resource Sharing .По стандарту W3C любому запросу CORS должен предшествовать пустой запрос OPTIONS, запрашивающий сервер разрешить последующий запрос с полезной нагрузкой.

Вы выполняете запрос к серверу, на котором размещен ваш скрипт?

Если да, то запрос jQuery верен, а запрос XMLHttpRequest - нет - вы должны реализовать предварительный запрос OPTIONS самостоятельно.

Если нет, то вам следует рассмотреть возможность изменения чего-либо в своей конфигурации - например, перемещенияСценарий для того же сайта, где находится ваша служба REST.

ИЛИ, как указано в комментариях, это может быть ошибка в jQuery или используемом вами браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...