Вопрос

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

Ниже приведен код, который я использую.Код вызывается, когда пользователь нажимает на ссылку, а не на кнопку формы "отправить".Он запускается без ошибок, вызывает вызываемый сервлет, но, как я упоминал ранее, тело СООБЩЕНИЯ, похоже, никогда не отправляется.

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

Я пробовал использовать "parameters" вместо "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
Это было полезно?

Решение

Это те ситуации, когда 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;
        }
     }
});

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

Другие советы

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

new Ajax.Request(url, {
  method: 'POST', 
  parameters: {
    hello: "world", test: "test"
  },
  onSuccess: function(transport){
    var data = transport.responseText.evalJSON();
  }
});

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top