jQuery的发送数据与转义? [英] jquery sending data with escapes?

查看:153
本文介绍了jQuery的发送数据与转义?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我听说当我使用jQuery.ajax并将数据作为对象发送时-它会自动-逃脱字符.

I heard that when i use jQuery.ajax and sending data as object - it automatically - escapes the chars.

它写在哪里? 我在文档中找不到它

where does it written ? I didnt find it in Documentation

是真的吗?

推荐答案

在源代码中,定义了本地函数add:

Inside the source code, a local function add is defined:

add = function( key, value ) {
   value = jQuery.isFunction( value ) ? value() : value;
   s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
};

此功能通过转义特殊字符来准备任何输入.当将对象作为参数传递时,将调用buildParams方法,并传递刚刚定义的add函数:

This function prepares any input by escaping the special characters. When an object is passed as an argument, the buildParams method is invoked, passing the just-defined add function:

for ( var prefix in a ) {
   buildParams( prefix, a[ prefix ], traditional, add );
}

递归函数 buildParams中,为每个对象参数调用add方法.口味有所不同,但通常采用以下格式:

Inside the recursive function buildParams, the add method is invoked for each object-parameter. The flavours differ, but are generally in the following format:

add( prefix, obj );


相关代码,这些代码源自 源代码 :


Relevant code, derived from the source code:

    // Serialize an array of form elements or a set of
    // key/values into a query string
    param: function( a, traditional ) {
        var s = [],
            add = function( key, value ) {
                // If value is a function, invoke it and return its value
                value = jQuery.isFunction( value ) ? value() : value;
                s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
            };

        // Set traditional to true for jQuery <= 1.3.2 behavior.
        if ( traditional === undefined ) {
            traditional = 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 ( var prefix in a ) {
                buildParams( prefix, a[ prefix ], traditional, add );
            }
        }

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

function buildParams( prefix, obj, traditional, add ) {
    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 {
                // If array item is non-scalar (array or object), encode its
                // numeric index to resolve deserialization ambiguity issues.
                // Note that rack (as of 1.0.0) can't currently deserialize
                // nested arrays properly, and attempting to do so may cause
                // a server error. Possible fixes are to modify rack's
                // deserialization algorithm or to provide an option or flag
                // to force array serialization to be shallow.
                buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
            }
        });

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

    } else {
        // Serialize scalar item.
        add( prefix, obj );
    }
}

这篇关于jQuery的发送数据与转义?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆