diff options
author | jaubourg <j@ubourg.net> | 2011-01-16 05:26:46 +0100 |
---|---|---|
committer | jaubourg <j@ubourg.net> | 2011-01-16 05:26:46 +0100 |
commit | 158fa822dea3198de5a4bcff3955b869ebb758c8 (patch) | |
tree | d6da850e85cb6fbf237bdad24f51570ba58acf7c /src/ajax/jsonp.js | |
parent | f74b84498987ace9bbbc3c041607016a23ff251e (diff) | |
download | jquery-158fa822dea3198de5a4bcff3955b869ebb758c8.tar.gz jquery-158fa822dea3198de5a4bcff3955b869ebb758c8.zip |
Setting the jsonp option to false now inhibits any url manipulation regarding the callback.
Diffstat (limited to 'src/ajax/jsonp.js')
-rw-r--r-- | src/ajax/jsonp.js | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/ajax/jsonp.js b/src/ajax/jsonp.js index 675ecc085..883876fc0 100644 --- a/src/ajax/jsonp.js +++ b/src/ajax/jsonp.js @@ -1,8 +1,7 @@ (function( jQuery ) { var jsc = jQuery.now(), - jsre = /(\=)(?:\?|%3F)(&|$)|()(?:\?\?|%3F%3F)()/i, - rquery_jsonp = /\?/; + jsre = /(\=)(?:\?|%3F)(&|$)|()(?:\?\?|%3F%3F)()/i; // Default jsonp settings jQuery.ajaxSetup({ @@ -12,23 +11,36 @@ jQuery.ajaxSetup({ } // Detect, normalize options and install callbacks for jsonp requests -}).ajaxPrefilter("json jsonp", function(s, originalSettings) { +// (dataIsString is used internally) +}).ajaxPrefilter("json jsonp", function(s, originalSettings, dataIsString) { + + dataIsString = ( typeof(s.data) === "string" ); if ( s.dataTypes[ 0 ] === "jsonp" || - originalSettings.jsonp || originalSettings.jsonpCallback || - jsre.test(s.url) || - typeof(s.data) === "string" && jsre.test(s.data) ) { + originalSettings.jsonp != null || + s.jsonp !== false && ( jsre.test( s.url ) || + dataIsString && jsre.test( s.data ) ) ) { var responseContainer, jsonpCallback = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback, previous = window[ jsonpCallback ], - url = s.url.replace(jsre, "$1" + jsonpCallback + "$2"), - data = s.url === url && typeof(s.data) === "string" ? s.data.replace(jsre, "$1" + jsonpCallback + "$2") : s.data; - - if ( url === s.url && data === s.data ) { - url += (rquery_jsonp.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback; + url = s.url, + data = s.data, + replace = "$1" + jsonpCallback + "$2"; + + if ( s.jsonp !== false ) { + url = url.replace( jsre, replace ); + if ( s.url === url ) { + if ( dataIsString ) { + data = data.replace( jsre, replace ); + } + if ( s.data === data ) { + // Add callback manually + url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback; + } + } } s.url = url; |