var aaa = [{a:1, b:2}, {b:2, c:4}];
var obj = {};
obj.a = aaa;
alert($.param(obj));
如果这样写就可以弹出:a%5b0%5d%5ba%5d%3d1%26a%5b0%5d%5bb%5d%3d2%26a%5b1%5d%5bb%5d%3d2%26a%5b1%5d%5bc%5d%3d4
解码后:a[0][a]=1&a[0][b]=2&a[1][b]=2&a[1][c]=4var aaa = [{a:1, b:2}, {b:2, c:4}];
alert($.param(aaa));
但如果这样写就弹出:undefined=undefined&undefined=undefined问题:
1、$.param()不是也可以转换数组吗?为什么会出现上面的情况呢?
2、按第一段代码弹出的内容,URL可以传输数组吗??

解决方案 »

  1.   

    数组要这样:
    var aaa = [{name:'a',value:1},{name:'b',value:2}];
    alert(unescape($.param(aaa)));
    可以看源代码: param: function( a ) {
    var s = []; // If an array was passed in, assume that it is an array
    // of form elements
    if ( a.constructor == Array || a.jquery )
    // Serialize the form elements
    jQuery.each( a, function(){
    s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
    }); // Otherwise, assume that it's an object of key/value pairs
    else
    // Serialize the key/values
    for ( var j in a )
    // If the value is an array then the key names need to be repeated
    if ( a[j] && a[j].constructor == Array )
    jQuery.each( a[j], function(){
    s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
    });
    else
    s.push( encodeURIComponent(j) + "=" + encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] ) ); // Return the resulting serialization
    return s.join("&").replace(/%20/g, "+");
    }
      

  2.   

    谢谢你的回答!
    但是我的JSON数组没有写错啊~?我只是想知道为什么同一个东西,用$.param()出来以后的值不一样。
      

  3.   

    参数是数组就必须包含 name和value属性。 源代码就是这么设计的。
      

  4.   

    建议看一下jQuery的源码,好像param有一个标志是否浅层次序列化以构造参数字符串