jQuery promise .done()会立即触发,而不是等待服务器返回

jQuery promise .done() is firing immediately, not waiting for server to return

本文关键字:等待 返回 服务器 done promise jQuery      更新时间:2023-09-26

我试图使用从我的$.post()函数返回的承诺的.done()事件。它所调用的服务器端函数需要5秒钟才能返回。问题是.done()事件立即触发,就好像它已经完成了一样。请参阅下面的代码。如果我在.post()调用中定义一个成功函数,它会正常工作,只有promise对象上的.done()事件会立即执行。知道我错过了什么吗?

    $(document).ready(function () {
        $("img.spinner").hide();
        var hideSpinner = function (img) {
            $(img).hide();                
        }
        $("button.Update").click(function () {
            var img = $(this).siblings("img.spinner").show();
            var promise = $.post('/MyFunc/Func',
                function(){
                    $(img).hide();
                }
                );
            promise.done(hideSpinner(img));
        });

    })

这是因为hideSpinner(img)调用hideSpinner函数。它是一个函数调用,而不是对函数的引用。试试这个:

promise.done(function () {
    hideSpinner(img)
});

你需要传递一个函数引用给done…相反,你调用hideSpinner函数并传递它返回的值作为完成回调。

promise.done(function(){
    hideSpinner(img)
});