Jquery ajax的参数格式化

  jQuery的ajax会自动将js对象转换为可传递的参数,$.param(jsobj, boolean),但是默认会把对象中数组类型加上[]符号,后台就不怎么好取了

  参数boolean为true时不加[],默认为false。

下面是jQuery参数格式化的源代码

假设对象为{a:1,b:[2,3]}

$.ajax中:

// Convert data if not already a string
        if ( s.data && s.processData && typeof s.data !== "string" ) {
            s.data = jQuery.param( s.data, s.traditional );
        }

使用的$.param格式化(traditional就是第二个参数)

jQuery.param = function( a, traditional ) {
    var prefix,
        s = [],
        add = function( key, value ) {
            // If value is a function, invoke it and return its value
            value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
            s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
        };

    // Set traditional to true for jQuery <= 1.3.2 behavior.
    if ( traditional === undefined ) {
        traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
    }

    // If an array was passed in, assume that it is an array of form elements.
    if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
        // Serialize the form elements
        jQuery.each( a, function() {
            add( this.name, this.value );
        });

    } else {
        // If traditional, encode the "old" way (the way 1.3.2 or older
        // did it), otherwise encode params recursively.
        for ( prefix in a ) {
            buildParams( prefix, a[ prefix ], traditional, add );
        }
    }

    // Return the resulting serialization
    return s.join( "&" ).replace( r20, "+" );
};

调用buildParams( prefix, a[ prefix ], traditional, add )

function buildParams( prefix, obj, traditional, add ) {
    var name;

    if ( jQuery.isArray( obj ) ) {
        // Serialize array item.
        jQuery.each( obj, function( i, v ) {
            if ( traditional || rbracket.test( prefix ) ) {
                // Treat each array item as a scalar.
                add( prefix, v );

            } else {
                // Item is non-scalar (array or object), encode its numeric index.
                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
            }
        });

    } else if ( !traditional && jQuery.type( obj ) === "object" ) {
        // Serialize object item.
        for ( name in obj ) {
            buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
        }

    } else {
        // Serialize scalar item.
        add( prefix, obj );
    }
}
时间: 2024-10-11 13:30:54

Jquery ajax的参数格式化的相关文章

ASP.NET jquery ajax传递参数

第一种:GET传递 前台 ajax   GET 传递 :即在请求的地址后面加上参数,URL地址长度有显示,安全性低 后台接收:Request.QueryString[“参数名字”]! 例如: function LoadBar(id) { var project = id; var month = $("#txtMonth").val(); $.ajax({ type: "GET", async: false, url: 'GetProjectScore.aspx?p

JQuery中$.ajax()方法参数详解 ASP.NET jquery ajax传递参数

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

jQuery Ajax同步参数导致浏览器假死怎么办

俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的:  代码如下 复制代码 function getData1(){        var result;        $.ajax({            url : 'p.

jQuery.ajax各种参数及属性设置

$.ajax({ type: "post", url: url, dataType:'html', success: function(data) { }, complete: function(XMLHttpRequest, textStatus) { }, error: function(){} }); success : 当请求成功时调用的函数.这个函数会得到一个参数:从服务器返回的数据.当请求成功时调用函数,即status==200.complete :当请求完成时调用的函数.

Jquery.ajax发送参数调用.Net Mvc子方法返回一个子页面嵌入当前页

前端页面: <div id='预留位置'> </div> $.ajax({            url: '@Url.Action("子方法")',     //调用子方法(child action)            type: 'POST',            data: ({ 参数名称: 值 }),    //注意括号                     dataType: 'html',   //返回html格式            su

JQuery AJAX error参数

$.ajax({ url: "/api/v1/XMProject", //请求的url地址 dataType: "json", async: true, data: data, type: "POST", success: function (reg) { if (reg.code == 0) { parent.location.href = "/project/xmlist.html"; } else { layer.msg

jASP.NET jquery ajax传递参数

转自:https://www.cnblogs.com/umlzhang/p/3654486.html 第一种:GET传递 前台 ajax   GET 传递 :即在请求的地址后面加上参数,URL地址长度有显示,安全性低 后台接收:Request.QueryString[“参数名字”]! 例如: function LoadBar(id) {    var project = id;    var month = $("#txtMonth").val();    $.ajax({      

.Net WebAPI+Jquery Ajax 请求参数

=====Get请求参数会有长度限制,所以如果长度过长可用Post请求 Get: QueryString 类型参数 Post: FormData   类型参数 Get 请求 在浏览器F12中→Network→Headers→Query String Parameters 显示Get请求的参数 在WebAPI ajax请求中get 请求在后端接口直接可用参数接收 例如后端接口参数: (string a,string b) 前端接口:/Controller/方法名?a=1&&b=2;     

jquery ajax传参数问题

var fd = new FormData();//实例化表单,提交数据使用fd.append('imgUrl',imgUrl);//将files追加进去fd.append('typeId',typeId);//将files追加进去fd.append('link',link);//将files追加进去fd.append('id',id);//将files追加进去 把fd传进去即可,啥问题都没了.