git.asbjorn.biz
/
jquery.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Disable the X-Requested-With header to avoid preflighting remote POST requests. Fixes...
[jquery.git]
/
src
/
ajax.js
diff --git
a/src/ajax.js
b/src/ajax.js
index
858ac4b
..
1e0729f
100644
(file)
--- a/
src/ajax.js
+++ b/
src/ajax.js
@@
-15,6
+15,10
@@
jQuery.fn.extend({
load: function( url, params, callback ) {
if ( typeof url !== "string" ) {
return this._load( url );
load: function( url, params, callback ) {
if ( typeof url !== "string" ) {
return this._load( url );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
}
var off = url.indexOf(" ");
}
var off = url.indexOf(" ");
@@
-102,7
+106,7
@@
jQuery.fn.extend({
});
// Attach a bunch of functions for handling common AJAX events
});
// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(i,o){
jQuery.fn[o] = function(f){
return this.bind(o, f);
};
jQuery.fn[o] = function(f){
return this.bind(o, f);
};
@@
-194,7
+198,7
@@
jQuery.extend({
ajax: function( s ) {
// Extend the settings, but re-extend 's' so that it can be
// checked again later (in the test suite, specifically)
ajax: function( s ) {
// 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));
+ s = jQuery.extend(true, {}, jQuery.ajaxSettings, s);
var jsonp, status, data,
callbackContext = s.context || window,
var jsonp, status, data,
callbackContext = s.context || window,
@@
-271,13
+275,12
@@
jQuery.extend({
}
// Matches an absolute URL, and saves the domain
}
// Matches an absolute URL, and saves the domain
- var parts = rurl.exec( s.url );
+ var parts = rurl.exec( s.url ),
+ remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
- if ( s.dataType === "script" && type === "GET" && parts
- && ( parts[1] && parts[1] !== location.protocol || parts[2] !== location.host )) {
-
+ if ( s.dataType === "script" && type === "GET" && remote ) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = s.url;
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = s.url;
@@
-334,19
+337,22
@@
jQuery.extend({
xhr.setRequestHeader("Content-Type", s.contentType);
}
xhr.setRequestHeader("Content-Type", s.contentType);
}
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[s.url] ) {
- xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
- }
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[s.url] ) {
+ xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+ }
- if ( jQuery.etag[s.url] ) {
- xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
- }
+ if ( jQuery.etag[s.url] ) {
+ xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
}
}
+ }
// Set header so the called script knows that it's an XMLHttpRequest
// Set header so the called script knows that it's an XMLHttpRequest
- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ // Only send the header if it's not a remote XHR
+ if ( !remote ) {
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ }
// Set the Accepts header for the server, depending on the dataType
xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
// Set the Accepts header for the server, depending on the dataType
xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
@@
-457,6
+463,8
@@
jQuery.extend({
xhr.send( type === "POST" || type === "PUT" ? s.data : null );
} catch(e) {
jQuery.handleError(s, xhr, null, e);
xhr.send( type === "POST" || type === "PUT" ? s.data : null );
} catch(e) {
jQuery.handleError(s, xhr, null, e);
+ // Fire the complete handlers
+ complete();
}
// firefox 1.5 doesn't fire statechange for sync requests
}
// firefox 1.5 doesn't fire statechange for sync requests
@@
-467,7
+475,7
@@
jQuery.extend({
function success(){
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
function success(){
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
- s.success.call( callbackContext, data, status );
+ s.success.call( callbackContext, data, status, xhr );
}
// Fire the global callback
}
// Fire the global callback