Используя jquery для создания POST, как правильно указать параметр "данные"?
Я хотел бы сделать ajax-вызов как POST, и он отправится на мой сервлет. Я хочу отправить параметризованные данные, например:
var mydata = 'param0=some_text¶m1=some_more_text';
Я предоставляю это как параметр data для моего 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.
}
}
Кроме того, я должен сначала закодировать мою строку данных вручную перед использованием, правильно? Как:
var mydata = 'param0=' + urlencode('hi there!');
mydata += '¶m1=' + urlencode('blah blah');
mydata += '%param2=' + urlencode('we get it');
Спасибо!
Ответы
Ответ 1
Более простой способ - предоставить свойство 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()
(которую вы также можете использовать напрямую) для кодирования объекта в строку, называемую здесь, а кишки здесь.
Ответ 2
Если у вас есть форма, вы также можете сделать var data = jQuery("#myForm").serialize();
, который помещает ее в форму, которую jQuery.ajax
может понять и использовать. В противном случае используйте литерал объекта, описанный в ответе Ника.
Ответ 3
может это вам помочь
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);
Ответ 4
Вам нужна эта часть:
data: JSON.stringify({
BarcodeNumber: $('#shipmentId-input').val(),
StatusId: $('[name="StatusId"]').val()
}),
Полный объект:
$.ajax(
{
url: "/Agent/Shipment/BulkUpdate",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify({
BarcodeNumber: $('#shipmentId-input').val(),
StatusId: $('[name="StatusId"]').val()
}),
success: function (data, textStatus, jqXHR) {
if (textStatus== "success") {
alert(data);
// Handel success
}
else {
// Handel response error
}
},
error: function (jqXHR, textStatus, errorThrown){
//Handel connection error
}
});
Ответ 5
Вам не нужно кодировать POST-переменные URL. Однако, если вы взаимодействуете с базой данных, вам нужно будет убедиться, что ваши переменные защищены от наложения инъекций.
То, что у вас есть, будет работать, но как Vivin, если это форма, лучший способ сделать это - через .serialize()
.
Я использую это LOT лично для всех моих представлений формы (выполняется через .ajax()
).