AJAX. Запрос POST тело не отправлено - PullRequest
1 голос
/ 19 октября 2008

Я пытаюсь создать POST-запрос, к сожалению, тело POST никогда не отправляется.

Ниже приведен код, который я использую. Код вызывается, когда пользователь нажимает на ссылку, а не на кнопку «Отправить» формы. Он запускается без ошибок, вызывает вызываемый сервлет, но, как я упоминал ранее, тело POST никогда не отправляется.

Я могу подтвердить, что тело запроса никогда не отправляется, поскольку у меня есть доступ к вызываемому сервлету.

Я пытался использовать «параметры» вместо «requestBody». Я также попытался использовать строку параметров (x = a? Y = b). Я также проверил, что "ckULK" содержит действительное значение.

Есть идеи?

new Ajax.Request(sURL,
{
    method: 'POST'
    , contentType: "text/x-json"
    , requestBody: {ulk:ckULK}
    , onFailure:
        function(transport)
        {
            vJSONResp = transport.responseText;
            var JSON = eval( "(" + vJSONResp + ")" );
            updateStatus(JSON.code + ": " + JSON.message);
        } // End onFailure
    , onSuccess: 
        function(transport) 
        {
            if (200 == transport.status)
            {
                vJSONResp = transport.responseText;
            }
            else
            {
                log.value += "\n" + transport.status;
            }
         } // End onSuccess
}); // End Ajax.request

Ответы [ 3 ]

6 голосов
/ 19 октября 2008

В таких ситуациях Firebug и Firefox действительно полезны. Я предлагаю вам установить Firebug, если у вас его нет, и проверить отправляемый запрос.

Вам также определенно нужно придерживаться parameters вместо requestBody.

Это:

new Ajax.Request(sURL,
{
    method: 'POST',
    parameters: 'hello=world&test=yes',
    onFailure: function(transport) {
        vJSONResp = transport.responseText;
        var JSON = eval( "(" + vJSONResp + ")" );
        updateStatus(JSON.code + ": " + JSON.message);
    },
    onSuccess: function(transport) {
        if (200 == transport.status) {
            vJSONResp = transport.responseText;
        } else {
            log.value += "\n" + transport.status;
        }
     }
});

Определенно должно работать.

1 голос
/ 20 октября 2008

Просто передайте данные как parameters в конструктор Ajax Request:

new Ajax.Request(url, {
  method: 'POST', 
  parameters: {
    hello: "world", test: "test"
  },
  onSuccess: function(transport){
    var data = transport.responseText.evalJSON();
  }
});
0 голосов
/ 12 июля 2012

Когда я столкнулся с этой проблемой, решением было удалить contentType из Ajax.Request параметров.

В ответ от Паоло Бергантино contentType не определен в Ajax.Request вариантах.

По неизвестным причинам параметры, определенные в parameters, не были отправлены (FF не показал их, и мой сервер увидел пустое тело POST).

Один из моих коллег предложил использовать postBody вместо parameters, но я не пробовал.

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