// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
- head.removeChild( script );
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
}
};
}
// Wait for a response to come back
var onreadystatechange = function(isTimeout){
// The request was aborted, clear the interval and decrement jQuery.active
- if ( xhr.readyState === 0 ) {
+ if ( !xhr || xhr.readyState === 0 ) {
if ( ival ) {
// clear poll interval
clearInterval( ival );
// Send the data
try {
- xhr.send( type === "POST" ? s.data : null );
+ xhr.send( type === "POST" || type === "PUT" ? s.data : null );
} catch(e) {
jQuery.handleError(s, xhr, null, e);
}
// Determines if an XMLHttpRequest returns NotModified
httpNotModified: function( xhr, url ) {
- var last_modified = xhr.getResponseHeader("Last-Modified"),
+ var lastModified = xhr.getResponseHeader("Last-Modified"),
etag = xhr.getResponseHeader("Etag");
- if ( last_modified ) {
- jQuery.lastModified[url] = last_modified;
+ if ( lastModified ) {
+ jQuery.lastModified[url] = lastModified;
}
if ( etag ) {
// of form elements
if ( jQuery.isArray(a) || a.jquery ) {
// Serialize the form elements
- jQuery.each( a, function(){
+ jQuery.each( a, function() {
add( this.name, 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 ( jQuery.isArray(a[j]) ) {
- jQuery.each( a[j], function(){
- add( j, this );
- });
+ // Recursively encode parameters from object,
+ // building a prefix path as we go down
+ function buildParams(obj, prefix)
+ {
+ if ( jQuery.isArray(obj) ) {
+ for ( var i = 0, length = obj.length; i < length; i++ ) {
+ buildParams( obj[i], prefix );
+ };
+ } else if( typeof(obj) == "object" ) {
+ for ( var j in obj ) {
+ var postfix = ((j.indexOf("[]") > 0) ? "[]" : ""); // move any brackets to the end
+ buildParams(obj[j], (prefix ? (prefix+"["+j.replace("[]", "")+"]"+postfix) : j) );
+ }
} else {
- add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
+ add( prefix, jQuery.isFunction(obj) ? obj() : obj );
}
}
+ buildParams(a);
}
// Return the resulting serialization