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

use*_*114 20 jquery

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

var mydata = 'param0=some_text&param1=some_more_text';
Run Code Online (Sandbox Code Playgroud)

我提供这个作为我的jquery ajax()调用的'data'参数.所以这应该插在POST的正文中,对吧?(我的意思是,没有附加到我的'mysite/save'URL?):

$.ajax({
    url: 'mysite/save',
    type: 'POST',
    data: mydata
});
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.在我的servlet中,我只是转储所有收到的参数,我看到它们都很顺利:

private void printParams(HttpServletRequest req) {
    Enumeration paramNames = req.getParameterNames();
    while (paramNames.hasMoreElements()) { 
        // print each param key/val here.
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,我应该在使用前手动编码我的数据字符串,对吧?喜欢:

var mydata = 'param0=' + urlencode('hi there!');
mydata += '&param1=' + urlencode('blah blah');
mydata += '%param2=' + urlencode('we get it');
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nic*_*ver 37

更简单的方法是将data属性作为对象提供,如下所示:

$.ajax({
  url: 'mysite/save',
  type: 'POST',
  data: { param0:'hi there!', param1:'blah blah', param2:'we get it' }
});
Run Code Online (Sandbox Code Playgroud)

否则,是的,你应该对它进行编码,因为&例如任何东西都会很快搞砸了.在我看来,无论如何,将它作为一个对象提供是一种更加清晰/简单的方法.

您也可以将其分隔出来,并从内联其他位置检索属性,如下所示:

$.ajax({
  url: 'mysite/save',
  type: 'POST',
  data: { 
          param0: $('#textbox0').val(), 
          param1: $('#textbox1').val(), 
          param2: $('#textbox2').val()
        }
});
Run Code Online (Sandbox Code Playgroud)

编辑:如果你很好奇jQuery如何在内部进行这种编码,它正在使用$.param()(也可以直接使用)将对象编码为一个字符串,在这里调用,以及这里的内容.