Тело POST AJAX.Request не отправляется

Я пытаюсь создать запрос 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

Когда вы настраиваете обычную форму, без использования AJAX, работает ли это в той же ситуации? Я спрашиваю, потому что, если вы используете IE, есть неочевидная особенность, о которой нужно знать.

Tomalak 19.10.2008 14:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
15 535
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

Просто передайте данные как parameters в конструктор 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, но я не пробовал.

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