2016-06-01 10 views
1

是否可以告诉jQuery /一个AJAX调用以特定的方式格式化查询字符串参数,而不仅仅是编写我自己的序列化程序?是否可以自定义jQuery如何序列化AJAX url参数?

我有一个jQuery AJAX调用,并且正在使含有URL参数

var params = {name: 'somename', favColors: ['red','blue']};

检查AJAX调用$.get("/Controller/Action/", params)一个目的示出了URL PARAM串是?name=somename&favColors[]=red&favColors[]=blue

目标URL期望查询参数不包含重复数组值的[],例如?name=somename&favColors=red&favColors=blue

谢谢!

回答

0

您可以使用jQuery.param()和第2参数traditional,将结果提供给$.get()

var params = {name: 'somename', favColors: ['red','blue']}; 

$.get("/Controller/Action/", $.param(params, true)) 

该参数被描述为:

一个布尔指示是否执行传统的“浅”序列化。

在这种情况下:

console.log($.param(params, true)); 
// "name=somename&favColors=red&favColors=blue" 
+0

从未停下来弄清楚什么'traditional'是,我想,因为我从来没有需要它...让我的答案都看傻了,现在 – charlietfl

+0

谢谢,这是正是我之后的解决方案! – AndrewP

0

$.get()也接受查询字符串作为第二个参数而不是对象。您可以使用它来追加自定义生成的查询字符串。 ?会附加给你,所以你不需要放一个。

0

jQuery使用$.param()来对来自对象的数据字符串进行编码。您可以自己使用它并删除编码为%5B%5D[]

正如在其他的答案串指出可以使用,以及对象数据参数

喜欢的东西:

var reg =/%5B%5D/g; 
var params= $.param({name: 'somename', favColors: ['red','blue']}).replace(reg,''); 
$.get("/Controller/Action/", params) 

在浏览器控制台只测试

相关问题