0

我到处寻找解决方案,但到目前为止还没有找到任何东西(我可能使用了错误的关键字!如果这是重复的,请指出,我将删除)

你们中的一位才华横溢的天才能否向我解释为什么以下内容不能像人们希望的那样工作?我的意思是在回调完成complete之前调用回调,我不太明白为什么。setTimeoutsuccess

$.ajax({
    url: options.url,
    data: options.data,
    success: function(){
        setTimeout(function(){
            console.log('firing');
        },2000);
    },
    dataType: options.dataType,
    complete: function(){
        console.log('ended');   
    }
});

是因为回调setTimeout内部启动了一个新线程吗?success

这是否可以在不将回调函数传递给回调的情况下实现success

4

1 回答 1

4

发生这种情况是因为setTimeout()不会阻止代码的执行。

因此,complete回调会在您没有调用setTimeout().

您将不得不将您的console.log('ended');呼叫置于超时(也)或在超时内调用您的完整处理程序。:)

于 2013-02-08T10:23:11.007 回答