Я хотел бы выполнить ajax вызов как POST, он собирается перейти к моему сервлету. Я хочу отправить параметризованные данные, как следующее:
var mydata = 'param0=some_text¶m1=some_more_text';
Я предоставляю это как параметр 'данных' моего jQuery ajax () вызов. Таким образом, это должно быть вставлено в тело POST, правильно? (Я имею в виду, не добавленный к моему 'mysite/save' URL?):
$.ajax({
url: 'mysite/save',
type: 'POST',
data: mydata
});
это, кажется, работает правильно. В моем сервлете я просто вывожу все полученные параметры, и я вижу, что они все проникают приятно:
private void printParams(HttpServletRequest req) {
Enumeration paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
// print each param key/val here.
}
}
также, я должен URL кодировать мою строку данных вручную перед использованием, правильно? Как:
var mydata = 'param0=' + urlencode('hi there!');
mydata += '¶m1=' + urlencode('blah blah');
mydata += '%param2=' + urlencode('we get it');
Спасибо!
Более простой способ - предоставить свойство data
в виде объекта, например, так:
$.ajax({
url: 'mysite/save',
type: 'POST',
data: { param0:'hi there!', param1:'blah blah', param2:'we get it' }
});
В противном случае, да, вы должны его закодировать, поскольку, например, все, что содержит &
, очень быстро все испортит. Предоставление его в виде объекта - гораздо более ясный/простой подход, хотя, на мой взгляд, так или иначе.
Вы также можете разделить его на части и получать свойства из других мест в строке, например, так:
$.ajax({
url: 'mysite/save',
type: 'POST',
data: {
param0: $('#textbox0').val(),
param1: $('#textbox1').val(),
param2: $('#textbox2').val()
}
});
Edit: Если вам интересно, как jQuery делает эту кодировку внутри, он использует $.param()
(который вы также можете использовать напрямую) для кодирования объекта в строку, называемую здесь, и внутренности здесь.
Вам не нужно URL-кодировать переменные POST. Однако, если вы взаимодействуете с базой данных, вам нужно убедиться, что ваши переменные защищены от атак путем инъекций.
То, что у вас есть, будет работать, однако, как упоминала Вивин , если это форма, то лучший способ сделать это - через .serialize ()
.
Я лично использую это МНОГОЧИСЛЕННО для отправки всех форм (через .ajax ()
).
Если у вас есть форма, вы также можете выполнить var data = jQuery ("# myForm"). Serialize ();
, который преобразует ее в форму, которая jQuery.ajax
может понять и использовать. В противном случае используйте литерал объекта, описанный в ответе Ника.
может ли это помочь вам
function CallPageSync(url, data) {
var response;
$.ajax({
async: false,
url: url,
data: data,
timeout: 4000,
success: function(result) {
response = result;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText;
}
});
return response;
}
и вы можете назвать это как
response = CallPageSync(checkPageURL, "un=" + username);