ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
44 lines • 2.01 kB
JavaScript
var jQuery = require('../core'), nonce = require('./var/nonce'), rquery = require('./var/rquery'), __unnameddep__ = require('../ajax');
var oldCallbacks = [], rjsonp = /(=)\?(?=&|$)|\?\?/;
jQuery.ajaxSetup({
jsonp: 'callback',
jsonpCallback: function () {
var callback = oldCallbacks.pop() || jQuery.expando + '_' + nonce++;
this[callback] = true;
return callback;
}
});
jQuery.ajaxPrefilter('json jsonp', function (s, originalSettings, jqXHR) {
var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? 'url' : typeof s.data === 'string' && !(s.contentType || '').indexOf('application/x-www-form-urlencoded') && rjsonp.test(s.data) && 'data');
if (jsonProp || s.dataTypes[0] === 'jsonp') {
callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
if (jsonProp) {
s[jsonProp] = s[jsonProp].replace(rjsonp, '$1' + callbackName);
} else if (s.jsonp !== false) {
s.url += (rquery.test(s.url) ? '&' : '?') + s.jsonp + '=' + callbackName;
}
s.converters['script json'] = function () {
if (!responseContainer) {
jQuery.error(callbackName + ' was not called');
}
return responseContainer[0];
};
s.dataTypes[0] = 'json';
overwritten = window[callbackName];
window[callbackName] = function () {
responseContainer = arguments;
};
jqXHR.always(function () {
window[callbackName] = overwritten;
if (s[callbackName]) {
s.jsonpCallback = originalSettings.jsonpCallback;
oldCallbacks.push(callbackName);
}
if (responseContainer && jQuery.isFunction(overwritten)) {
overwritten(responseContainer[0]);
}
responseContainer = overwritten = undefined;
});
return 'script';
}
});