使用jquery进行POST,如何正确提供’data’参数?
我想把一个ajax调用作为POST,它将转到我的servlet。 我想发送参数化数据,如下所示:
var mydata = 'param0=some_text¶m1=some_more_text';
我将其作为我的jquery ajax()调用的’data’参数提供。 所以这应该插在POST的正文中,对吧? (我的意思是,没有附加到我的’mysite / save’url?):
$.ajax({ url: 'mysite/save', type: 'POST', data: mydata });
它似乎工作正常。 在我的servlet中,我只是转储所有收到的参数,我看到它们都很顺利:
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');
谢谢!
更简单的方法是将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() } });
编辑:如果你很好奇jQuery如何在内部进行这种编码,它使用$.param()
(你也可以直接使用它)将对象编码为一个字符串, 在这里调用,以及这里的内容 。
如果你有一个表单,你也可以做var data = jQuery("#myForm").serialize();
它把它放在jQuery.ajax
可以理解和使用的forms。 否则,请使用Nick的答案中描述的对象文字。
这可以帮到你吗
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);
您不需要URL编码POST变量。 但是,如果要与数据库进行交互,则需要确保变量受注入攻击保护。
你有什么工作,但正如Vivin所说,如果它是一个forms,那么最好的方法是通过.serialize()
。
我亲自为我的所有表单提交使用了这个(通过.ajax()
)。
你需要这个部分:
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); // Do something on page } else { // Do something on page } }, error: function (jqXHR, textStatus, errorThrown){ } });