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

问题描述:

我想做一个ajax调用作为一个POST,它会去我的servlet。我想送参数数据,如下所示:使用jquery进行POST,如何正确提供'data'参数?

var mydata = 'param0=some_text&param1=some_more_text'; 

我提供这个作为我的jQuery的ajax()调用的“数据”参数。所以这应该被插入到POST的正文中,对吗? (我的意思是,没有附加到我的'mysite/save'网址?):

$.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. 
    } 
} 

也是,我应该URL中使用之前手动编码我的数据串,是吗?如:

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()(其您也可以直接使用)将对象编码为字符串,称为here,胆号here

+0

非常酷,谢谢。 – user246114 2010-06-17 22:41:53

如果你有一个表格,你也可以做var data = jQuery("#myForm").serialize();,它把它放在一个jQuery.ajax可以理解和使用的形式。否则,使用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); 
+0

我想他想知道* how *如何构建'data'参数,而不是如何使用'jQuery.ajax'。 – 2010-06-17 22:22:54

+0

只需在网址中填写即可: “ID = 10&Name = aaaaa” – 2010-06-17 22:33:23

+0

定义提交类型比较好,我认为.. 类型:'POST' – 2017-07-03 10:17:06

你不需要URL编码POST变量。但是,如果您正在与数据库进行交互,则需要确保您的变量受到注入攻击保护。

你有什么工作,但作为Vivin提到,如果它是一种形式,那么最好的办法是通过.serialize()

我个人使用这个LOT所有我的表单提交(通过.ajax()完成)。