jQuery.fn.extend({
// Keep a copy of the old load
_load: jQuery.fn.load,
-
+
load: function( url, params, callback ) {
if ( typeof url != 'string' )
return this._load( url );
jQuery.makeArray(this.elements) : this;
})
.filter(function(){
- return this.name && !this.disabled &&
- (this.checked || /select|textarea/i.test(this.nodeName) ||
+ return this.name && !this.disabled &&
+ (this.checked || /select|textarea/i.test(this.nodeName) ||
/text|hidden|password/i.test(this.type));
})
.map(function(i, elem){
callback = data;
data = null;
}
-
+
return jQuery.ajax({
type: "GET",
url: url,
},
ajaxSettings: {
+ url: location.href,
global: true,
type: "GET",
timeout: 0,
_default: "*/*"
}
},
-
+
// Last-Modified header cache for next request
lastModified: {},
ajax: function( s ) {
- var jsonp, jsre = /=\?(&|$)/g, status, data;
-
// Extend the settings, but re-extend 's' so that it can be
// checked again later (in the test suite, specifically)
s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
+ var jsonp, jsre = /=\?(&|$)/g, status, data,
+ type = s.type.toUpperCase();
+
// convert data if not already a string
if ( s.data && s.processData && typeof s.data != "string" )
s.data = jQuery.param(s.data);
// Handle JSONP Parameter Callbacks
if ( s.dataType == "jsonp" ) {
- if ( s.type.toLowerCase() == "get" ) {
+ if ( type == "GET" ) {
if ( !s.url.match(jsre) )
s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
} else if ( !s.data || !s.data.match(jsre) )
if ( s.dataType == "script" && s.cache == null )
s.cache = false;
- if ( s.cache === false && s.type.toLowerCase() == "get" ) {
+ if ( s.cache === false && type == "GET" ) {
var ts = now();
// try replacing _= if it is there
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
}
// If data is available, append data to url for get requests
- if ( s.data && s.type.toLowerCase() == "get" ) {
+ if ( s.data && type == "GET" ) {
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
// IE likes to send both get and post data, prevent this
if ( s.global && ! jQuery.active++ )
jQuery.event.trigger( "ajaxStart" );
+ // Matches an absolute URL, and saves the domain
+ var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
+
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
- if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) && s.dataType == "script" && s.type.toLowerCase() == "get" ) {
+ if ( s.dataType == "script" && type == "GET"
+ && remote.test(s.url) && remote.exec(s.url)[1] != location.host ){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = s.url;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
- if ( !done && (!this.readyState ||
+ if ( !done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
success();
var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
// Open the socket
- xml.open(s.type, s.url, s.async, s.username, s.password);
+ // Passing null username, generates a login popup on Opera (#2865)
+ if( s.username )
+ xml.open(type, s.url, s.async, s.username, s.password);
+ else
+ xml.open(type, s.url, s.async);
// Need an extra try/catch for cross domain requests in Firefox 3
try {
xml.abort();
return false;
}
-
+
if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
// The transfer is complete and the data is available, or the request timed out
if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
requestDone = true;
-
+
// clear poll interval
if (ival) {
clearInterval(ival);
ival = null;
}
-
+
status = isTimeout == "timeout" && "timeout" ||
!jQuery.httpSuccess( xml ) && "error" ||
s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
try {
modRes = xml.getResponseHeader("Last-Modified");
} catch(e) {} // swallow exception thrown by FF if header is not available
-
+
if ( s.ifModified && modRes )
jQuery.lastModified[s.url] = modRes;
// JSONP handles its own success callback
if ( !jsonp )
- success();
+ success();
} else
jQuery.handleError(s, xml, status);
xml = null;
}
};
-
+
if ( s.async ) {
// don't attach the handler to the request, just poll it instead
- var ival = setInterval(onreadystatechange, 13);
+ var ival = setInterval(onreadystatechange, 13);
// Timeout checker
if ( s.timeout > 0 )
if ( xml ) {
// Cancel the request
xml.abort();
-
+
if( !requestDone )
onreadystatechange( "timeout" );
}
}, s.timeout);
}
-
+
// Send the data
try {
xml.send(s.data);
} catch(e) {
jQuery.handleError(s, xml, null, e);
}
-
+
// firefox 1.5 doesn't fire statechange for sync requests
if ( !s.async )
onreadystatechange();
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" );
}
-
+
// return XMLHttpRequest to allow aborting the request etc.
return xml;
},