功能似乎没有返回true

时间:2012-06-21 14:51:16

标签: jquery datatables

我正在使用DataTables插件和colorbox插件。如果.post成功,我试图让我的函数返回true。

jQuery('.msg_delete').live('click', function () {
        var aData = oTable.fnGetData(nTr);
        if (deleteMessage(aData[6]) == true) {
            jQuery.colorbox.close();
            oTable.fnDeleteRow(nTr);
        }
        return false;
    });

function deleteMessage(messageID) {
    jQuery.post('ajax/msg_functions.asp', { action: 'delete', messageid: messageID }, function (data) {

    })
    .success(function () { return true; })
    .error(function () { alert("There was an error while trying to make this request;  If it persists please contact support"); })
    ;
}

现在它正确地发布了帖子。我知道这是因为邮件被删除了。所以我认为它会转到.success,我认为现在会回归真实。但它似乎并没有这样做。

似乎永远不会去colorbox.close()fnDeleteRow.任何人都能看到我在这里失踪的东西吗?

1 个答案:

答案 0 :(得分:4)

您的返回仅返回当前函数,即您传递给$.ajax的匿名函数。

您的代码将无法以当前的方式运行,并开展示例。

jQuery('.msg_delete').live('click', function() {
    var aData = oTable.fnGetData(nTr);
    deleteMessage(aData[6]).done(function(){
        jQuery.colorbox.close();
        oTable.fnDeleteRow(nTr);
    });
    return false;
});

function deleteMessage(messageID) {
    return jQuery.post('ajax/msg_functions.asp', {
        action: 'delete',
        messageid: messageID
    }).fail(function() {
        alert("There was an error while trying to make this request;  If it persists please contact support");
    });
}​

此外,.success已弃用,请使用.done

编辑:

为了完整起见,您可以在变量中使用async:false并存储truefalse,然后从您的函数中返回该值,但效率较低,因此不推荐使用async:false暂停代码执行和用户交互的事实。