如何正确url编码jQuery ajax的嵌套对象属性

时间:2017-07-20 15:30:58

标签: jquery ajax asp.net-mvc

我有一个看似......的javascript对象。

filter = {
   lastchanged: 5,
   Location: {
      Country: 5,
      Province: 3
   }
}

我正在进行ajax调用...

jQuery.ajax({ url: search_url, data: filter, dataType: "html" })

我希望对象属性如此序列化......

/my-controller?lastchanged=5&Location.Country=5&Location.Province=3

但是他们目前正在序列化为......

/my-controller?lastchanged=5&Location%5BCountry%5D=5&Location%5BProvince%5D=3

不能使用MVC绑定。

是否有正确的方法告诉jQuery以第一种方式对参数进行编码,就像它是常规表单提交一样?

1 个答案:

答案 0 :(得分:0)

我不知道官方/ jQuery方式来获得您需要的精确格式,但您可以使用一些String Replace All操作自己完成。

演示:

function ReplaceAll(str, search, replacement) {
  return str.split(search).join(replacement);
};

function FormatForAjaxGET(obj) {
  var result = $.param(obj);
  result = ReplaceAll(result, "%5B", ".");
  result = ReplaceAll(result, "%5D=", "=");
  return result;
}

var filter = {
  lastchanged: 5,
  Location: {
    Country: 5,
    Province: 3
  }
};
console.log(FormatForAjaxGET(filter));

// And to make the call, do
// jQuery.ajax({ url: search_url + "?" + FormatForAjaxGET(filter), dataType: "html" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>