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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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