在jquery中将数组作为查询字符串传递

时间:2014-08-22 06:33:49

标签: c# jquery asp.net query-string

我在jquery中创建了一个名为array[]的字符串数组,并将值推送到它。

如何在查询字符串中发送此数组?

例如window.location.href('ViewData?array');

如何从jquery本身的查询字符串中获取数组数据? 请指教?

2 个答案:

答案 0 :(得分:3)

使用jQuery很容易实现,因为它有一个名为param()的辅助函数。

var myData = {
   name: "John Doe",
   age: 23,
   children: [{
      name: "Jane Doe",
      age: 13,
      children: []
      },
      {
      name: "John Doe Jr.",
      age: 16,
      children: []
      }
   ],
}
var p = $.param(myData)

结果:

"name=John+Doe&age=23&children%5B0%5D%5Bname%5D=Jane+Doe&children%5B0%5D%5Bage%5D=13&children%5B1%5D%5Bname%5D=John+Doe+Jr.&children%5B1%5D%5Bage%5D=16"

您可以像这样使用它:

window.location = "/MyController/MyAction?" + p;

至于从查询字符串中获取参数,请参阅以下问题:How can I get query string values in JavaScript?


您可以做的另一件事是使用ajax调用,这样您就不必自行序列化数据,因为它会自动为您完成。

$.ajax({
  url: "/MyController/MyAction",
  data: myData,
  dataType: "json",
  type: "POST",
  success: function(data){
    //'data' is your response data from the Action in form of a javascript object
  }
})

答案 1 :(得分:1)

我认为这就是你要找的东西。如果我弄错了,请告诉我。我从this链接复制了$.parseParams。您还可以查看工作代码here

(function($) {
var re = /([^&=]+)=?([^&]*)/g;
var decodeRE = /\+/g;  // Regex for replacing addition symbol with a space
var decode = function (str) {return decodeURIComponent( str.replace(decodeRE, " ") );};
$.parseParams = function(query) {
    var params = {}, e;
    while ( e = re.exec(query) ) { 
        var k = decode( e[1] ), v = decode( e[2] );
        if (k.substring(k.length - 2) === '[]') {
            k = k.substring(0, k.length - 2);
            (params[k] || (params[k] = [])).push(v);
        }
        else params[k] = v;
    }
    return params;
};
})(jQuery);

var s=["abc", "xyz", "123"];
var queryString=$.param({a:s});
console.log("object to query string: ", queryString);
console.log("query string to object: ", $.parseParams(queryString));