Merge branch 'master' of http://github.com/aakoch/jquery into aakoch-master
authorjeresig <jeresig@gmail.com>
Mon, 27 Sep 2010 18:49:13 +0000 (14:49 -0400)
committerjeresig <jeresig@gmail.com>
Mon, 27 Sep 2010 18:49:13 +0000 (14:49 -0400)
1  2 
src/ajax.js

diff --combined src/ajax.js
@@@ -4,11 -4,10 +4,11 @@@ var jsc = jQuery.now()
        rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
        rselectTextarea = /^(?:select|textarea)/i,
        rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
 +      rnoContent = /^(?:GET|HEAD|DELETE)$/,
        rbracket = /\[\]$/,
        jsre = /\=\?(&|$)/,
        rquery = /\?/,
-       rts = /([?&])_=[^&]*(&?)/,
+       rts = /([?&])_=[^&]*/,
        rurl = /^(\w+:)?\/\/([^\/?#]+)/,
        r20 = /%20/g,
        rhash = /#.*$/,
@@@ -205,12 -204,10 +205,12 @@@ jQuery.extend(
  
        ajax: function( origSettings ) {
                var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
 -                      jsonp, status, data, type = s.type.toUpperCase();
 +                      jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
  
                s.url = s.url.replace( rhash, "" );
 -              s.context = origSettings && origSettings.context || s;
 +
 +              // Use original (not extended) context object if it was provided
 +              s.context = origSettings && origSettings.context != null ? origSettings.context : s;
  
                // convert data if not already a string
                if ( s.data && s.processData && typeof s.data !== "string" ) {
                        var ts = jQuery.now();
  
                        // try replacing _= if it is there
-                       var ret = s.url.replace(rts, "$1_=" + ts + "$2");
+                       var ret = s.url.replace(rts, "$1_=" + ts);
  
                        // if nothing was replaced, add timestamp to the end
                        s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
                if ( s.dataType === "script" && type === "GET" && remote ) {
                        var head = document.getElementsByTagName("head")[0] || document.documentElement;
                        var script = document.createElement("script");
                        if ( s.scriptCharset ) {
                                script.charset = s.scriptCharset;
                        }
 +                      script.src = s.url;
  
                        // Handle Script loading
                        if ( !jsonp ) {
  
                // Need an extra try/catch for cross domain requests in Firefox 3
                try {
 -                      // Set the correct header, if data is being sent
 -                      if ( s.data || origSettings && origSettings.contentType ) {
 +                      // Set content-type if data specified and content-body is valid for this type
 +                      if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
                                xhr.setRequestHeader("Content-Type", s.contentType);
                        }
  
  
                        // Set the Accepts header for the server, depending on the dataType
                        xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
 -                              s.accepts[ s.dataType ] + ", */*" :
 +                              s.accepts[ s.dataType ] + ", */*; q=0.01" :
                                s.accepts._default );
                } catch( headerError ) {}
  
  
                // Send the data
                try {
 -                      xhr.send( (type !== "GET" && s.data) || null );
 +                      xhr.send( noContent || s.data == null ? null : s.data );
  
                } catch( sendError ) {
 -                      jQuery.ajax.handleError( s, xhr, null, e );
 +                      jQuery.ajax.handleError( s, xhr, null, sendError );
  
                        // Fire the complete handlers
                        jQuery.ajax.handleComplete( s, xhr, status, data );
  });
  
  function buildParams( prefix, obj, traditional, add ) {
 -      if ( jQuery.isArray(obj) ) {
 +      if ( jQuery.isArray(obj) && obj.length ) {
                // Serialize array item.
                jQuery.each( obj, function( i, v ) {
                        if ( traditional || rbracket.test( prefix ) ) {
                });
                        
        } else if ( !traditional && obj != null && typeof obj === "object" ) {
 +              if ( jQuery.isEmptyObject( obj ) ) {
 +                      add( prefix, "" );
 +
                // Serialize object item.
 -              jQuery.each( obj, function( k, v ) {
 -                      buildParams( prefix + "[" + k + "]", v, traditional, add );
 -              });
 +              } else {
 +                      jQuery.each( obj, function( k, v ) {
 +                              buildParams( prefix + "[" + k + "]", v, traditional, add );
 +                      });
 +              }
                                        
        } else {
                // Serialize scalar item.