想象一下,我有这三个功能:
$( document ).ajaxSuccess(function( event, xhr, settings ) {
console.log('ajaxSuccess fired');
});
function doCall1 () {
var xhr = new XMLHttpRequest();
xhr.open('get', 'someurl.com', true);
xhr.send();
}
function doCall2 (){
$.get('someurl.com');
}
当我致电doCall1
时,ajaxSuccess
不会触发。但是,当我致电doCall2
时,ajaxSuccess
会触发。
我理解这与事实上jQuery实际上是对$ .ajax()的各种方法使用回调函数而不是查看XMLHttpRequest的onreadystatechange / readyState(如果我不在标记时纠正我)这一事实有关,但我还是不完全明白。
有人可以给我一个快速的解释,或者直接告诉我一些文件,这些文件可以让我完成剩下的工作吗?
答案 0 :(得分:3)
正如其他人所说,ajaxSuccess
和ajaxComplete
是jQuery添加的非本机事件。如果由于某种原因你想要jQuery和vanilla js之间的互操作,你可以自己发送事件(需要注意的是CustomEvent
的浏览器支持是有限的):
var event = new CustomEvent("ajaxComplete");
document.dispatchEvent(event);
答案 1 :(得分:1)
这是因为ajaxSuccess
和ajaxComplete
方法是jQuery的一部分,它们只是由jQuery函数触发。
XMLHttpRequest
是一个原生的javascript对象,它与jQuery无关。
答案 2 :(得分:0)
触发ajaxSuccess
/ ajaxComplete
的代码写在$.ajax()
,$.get()
,$.post()
等的末尾。上述事件与jQuery和$.ajax()
,$.get()
,$.post()
函数是jQuery函数。
XHR是本机JavaScript,与jQuery无关。
答案 3 :(得分:-1)
一方面是具有deferrers的jQuery对象,另一方面是本机JavaScript对象,您必须自己附加回调并将其转发到jQuery的ajaxSuccess(jQ包装本机XMLRequest对象并执行此操作)。