原因
来自http://api.jquery.com/category/ajax/global-ajax-event-handlers/
注意:无论 global 的值如何,都不会为跨域脚本或 JSONP 请求触发全局事件。
来自http://bugs.jquery.com/ticket/8338
JSONP 请求不能保证完成(因为没有捕获到错误)。在这种情况下,jQuery 1.5 会强制全局选项为 false,以保证内部 ajax 请求计数器在某一时刻回到零。
如果您希望所有请求都触发事件,无论如何(并且冒着与 1.4.4 相同的不一致的风险),您可以使用以下预过滤器:
jQuery.ajaxPrefilter(function( options ) {
options.global = true;
});
解决方法
上面的代码确实使它工作:
$.ajaxPrefilter(function global_ajaxPrefilter(options, originalOptions, jqXHR) {
options.global = true;
});
$(document).ajaxSuccess(function global_ajaxSuccess(event, XMLHttpRequest, ajaxOptions) {
if(config.logResponses) {
console.log(XMLHttpRequest.responseText);
}
});
$(document).ajaxError(function global_ajaxError(event, jqXHR, ajaxSettings, thrownError) {
console.error("error: " + jqXHR.status + " " + thrownError);
});
但是,出于我的目的,以下方法效果更好:
$.ajaxPrefilter(/*dataTypes, */ function global_ajaxPrefilter(options, originalOptions, jqXHR) {
if(config.logResponses) {
jqXHR.done(function global_ajaxSuccess(data, textStatus, jqXHR) {
console.groupCollapsed(options.url + (options.data ? '&' + $.param(options.data) : ''));
console.log("Options: " + JSON.stringify(options));
console.log("Data: " + JSON.stringify(data));
console.groupEnd();
});
}
jqXHR.fail(function global_ajaxError(jqXHR, textStatus, errorThrown) {
console.error(textStatus + ": " + errorThrown));
});
});
global_ajaxSuccess
注意and的不同参数列表global_ajaxError
:
options
:在两种解决方案中都可用(包含 URL)
data
: 在全局处理程序中作为文本可用,在done
- 界面很熟悉
done
/error