【问题标题】:jquery Cannot read property 'done' of undefined - avoid thisjquery无法读取未定义的属性“完成” - 避免这种情况
【发布时间】:2025-12-11 04:30:01
【问题描述】:

我有一个返回结果(或不返回)的函数。问题是当它不返回任何值时,我在控制台中收到消息

无法读取未定义的“完成”属性

这是真的,我明白这个问题。另外,这个错误不会使我的代码停止工作,但我想知道是否有机会避免这种情况?

ajax中的函数是:

function getDelivery(){
    var items = new Array();

    $("#tab-delivery tr").each(function(){
        items.push({"id" : $(this).find('.form-control').attr('id'), "id_option" : $(this).find('.form-control').val()});
    });

    if(items.length > 0){
        return $.ajax({
            url: 'response.php?type=getDelivery',
            type: 'POST',
            data: {content: items}
        });
    }
}

我用它来称呼它:

getDelivery().done(function(data){ // the problem is here
    if(data == false){
        return;
    }
});

那么,有什么办法可以避免这个错误呢?我尝试了以下方法但没有成功:

if(items.length > 0){
    return $.ajax({
        url: 'response.php?type=getDelivery',
        type: 'POST',
        data: {content: items}
    });
}else{
    return false;
}

我得到了错误:

Uncaught TypeError: undefined is not a function

【问题讨论】:

    标签: javascript jquery undefined


    【解决方案1】:

    你可以只返回一个 deferred,这样done() 回调就不会产生错误,你可以选择是否解决它

    if(items.length > 0){
        return $.ajax({
            url: 'response.php?type=getDelivery',
            type: 'POST',
            data: {content: items}
        });
    }else{
        var def = new $.Deferred();
        def.resolve(false);
        return def;
    }
    

    FIDDLE

    【讨论】:

    • 完美。将在 8 分钟内接受答案。谢谢。
    • return $.Deferred().resolve(false); 也可以工作,并且稍微不那么冗长。
    最近更新 更多