如何将相同类型的多个参数传递给jQuery Get

Cli*_*udo 10 javascript jquery

我正在尝试使用jQuery $ .get从网站获取一些数据.我需要设置2个相同类型的参数:

..&q=Some Text&q=Some other text
Run Code Online (Sandbox Code Playgroud)

jQuery似乎用第二个覆盖q的第一个实例,只发送1.任何解决方法?

这是我试图使用的代码:

var params = {
       "otherParam":"x",
       "q":text,
       "q":title
};
$.get(url, params, mySuccessFunction);
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 26

尝试:

var params = {
  "otherParam": "x",
  "q": [ text, title ]
};
Run Code Online (Sandbox Code Playgroud)

编辑 - 更多信息:像这样的数组值参数由jQuery专门处理.为了安抚许多常见的服务器框架,默认情况下(因为我认为是1.5或1.6版本),这些将导致参数名称包含"[]"(开括号和近括号字符)作为后缀(没有数字,与我的错误相反)评论如下).如果你不想那样,你可以设置

jQuery.ajaxSettings.traditional = true;
Run Code Online (Sandbox Code Playgroud)

它只是"q"而不是"q []".

  • [这是一个jsfiddle.](http://jsfiddle.net/qVHuN/)当我最初的回答时,我应该记住"传统"的旗帜.对于那个很抱歉. (2认同)

Cli*_*udo 10

另一种解决它的方法是不需要encodeURIComponent()或搞乱 jQuery.ajaxSettings.traditional = true;我不愿意这样做,因为我不想干扰(甚至暂时)网站的其他部分可能同时做什么.

方法是:

 var params=[ 
       {name:"q", value:title},
       {name:"q", value:text}
 ];
 $.get(url, params, mySuccessFunction);
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果你避免使用`$ .get()`简写并直接使用`$ .ajax()`,你可以强制传统的序列化而不改变任何全局设置:`$ .ajax({traditional:true,url:.. })`.但这是另一个不错的选择. (2认同)

Jho*_*ung 5

另一种不修改的方法jQuery.ajaxSettings.traditional = true;是使用$.param() http://api.jquery.com/jQuery.param/

所以像这样:

var params = {
  "otherParam": "x",
  "q": [ text, title ]
};

$.get(url, $.param(params, true), mySuccessFunction);
Run Code Online (Sandbox Code Playgroud)