X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax.js;h=edb5c54beeb1d6501021113a3edff030f34cb22b;hb=5dc6b7ce3469eaadb37a151d449e8d36571d1894;hp=aed8dac419453c860e4db5b0436831012f218209;hpb=927e1966debda40d8def96b6a4ea35d2a9d5423c;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index aed8dac..edb5c54 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -1,7 +1,7 @@ var jsc = now(), - rscript = //g, + rscript = //gi, rselectTextarea = /select|textarea/i, - rinput = /text|hidden|password|search/i, + rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i, jsre = /=\?(&|$)/, rquery = /\?/, rts = /(\?|&)_=.*?(&|$)/, @@ -199,7 +199,7 @@ jQuery.extend({ var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings); var jsonp, status, data, - callbackContext = s.context || window, + callbackContext = s.context || s, type = s.type.toUpperCase(); // convert data if not already a string @@ -595,7 +595,7 @@ jQuery.extend({ var s = [], // Set jQuery.param.traditional to true for jQuery <= 1.3.2 behavior. - param_traditional = jQuery.param.traditional; + traditional = jQuery.param.traditional; function add( key, value ){ // If value is a function, invoke it and return its value @@ -603,37 +603,6 @@ jQuery.extend({ s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value); } - // Recursively encode parameters from object. - function buildParams( prefix, obj ) { - - if ( jQuery.isArray(obj) ) { - // Serialize array item. - jQuery.each( obj, function(i,v){ - if ( param_traditional ) { - 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 ); - } - }); - - } else if ( !param_traditional && typeof obj === "object" ) { - // Serialize object item. - jQuery.each( obj, function(k,v){ - buildParams( prefix + "[" + k + "]", v ); - }); - - } else { - // Serialize scalar item. - add( prefix, obj ); - } - } - // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray(a) || a.jquery ) { // Serialize the form elements @@ -642,9 +611,39 @@ jQuery.extend({ }); } else { - // If jQuery.param.traditional is set, encode the "old" way (the way - // 1.3.2 or older did it), otherwise encode params recursively. - jQuery.each( a, buildParams ); + // If jQuery.param.traditional is true, encode the "old" way (the + // way 1.3.2 or older did it), otherwise encode params recursively. + jQuery.each( a, function buildParams( prefix, obj ) { + + if ( jQuery.isArray(obj) ) { + // Serialize array item. + jQuery.each( obj, function(i,v){ + if ( traditional ) { + // 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 ); + } + }); + + } else if ( !traditional && typeof obj === "object" ) { + // Serialize object item. + jQuery.each( obj, function(k,v){ + buildParams( prefix + "[" + k + "]", v ); + }); + + } else { + // Serialize scalar item. + add( prefix, obj ); + } + }); } // Return the resulting serialization