使用jquery进行POST,如何正确提供’data’参数?

我想把一个ajax调用作为POST,它将转到我的servlet。 我想发送参数化数据,如下所示:

var mydata = 'param0=some_text&param1=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 += '&param1=' + 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){ } });