$.ajax是一个用于执行异步HTTP请求的jQuery函数,以下是一个简单的$.ajax源码实现,仅供参考:
(function($) { $.ajax = function(options) { var defaults = { type: 'GET', url: '', data: {}, dataType: 'json', success: null, error: null, complete: null, timeout: 0, headers: {} }; var settings = $.extend({}, defaults, options); if (settings.type === 'GET' && settings.data) { settings.url += '?' + $.param(settings.data); } var xhr = new XMLHttpRequest(); xhr.open(settings.type, settings.url, true); for (var key in settings.headers) { xhr.setRequestHeader(key, settings.headers[key]); } xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { if (settings.dataType === 'json') { var responseData = JSON.parse(xhr.responseText); } else { var responseData = xhr.responseText; } if ($.isFunction(settings.success)) { settings.success(responseData, xhr.status, xhr); } } else { if ($.isFunction(settings.error)) { settings.error(xhr, xhr.status, xhr.statusText); } } if ($.isFunction(settings.complete)) { settings.complete(xhr, xhr.status); } } }; if (settings.timeout > 0) { xhr.timeout = settings.timeout; xhr.ontimeout = function() { if ($.isFunction(settings.error)) { settings.error(xhr, 'timeout', 'Request timed out'); } }; } if (settings.type === 'POST' || settings.type === 'PUT') { xhr.setRequestHeader('ContentType', 'application/xwwwformurlencoded'); xhr.send($.param(settings.data)); } else { xhr.send(); } }; })(jQuery);
这个简化版的$.ajax实现了基本的GET和POST请求,以及一些常见的选项,如超时、成功回调、错误回调等,这个实现并不完整,实际应用中建议使用jQuery库自带的$.ajax方法。