AJAX.Тело сообщения запроса не отправляется
-
03-07-2019 - |
Вопрос
Я пытаюсь создать 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
, но я не пробовал.