Javascript 将错误消息传递给Deferred.reject()时未拒绝承诺

Javascript 将错误消息传递给Deferred.reject()时未拒绝承诺,javascript,jquery,asynchronous,promise,Javascript,Jquery,Asynchronous,Promise,我有一个JavaScript函数,它有一个异步调用来验证表单上选定的选项。当我向reject()调用传递消息时,它实际上并不拒绝承诺。当我删除message参数时,它会按预期工作 function myValidationCallback(statusId) { var d = $.Deferred(); $.ajax({ url: "/ServersideValidationCall?statusId=" + statusId, method:

我有一个JavaScript函数,它有一个异步调用来验证表单上选定的选项。当我向reject()调用传递消息时,它实际上并不拒绝承诺。当我删除message参数时,它会按预期工作

function myValidationCallback(statusId) {
    var d = $.Deferred();
    $.ajax({
        url: "/ServersideValidationCall?statusId=" + statusId,
        method: "POST",
        dataType: "json",
        contentType: "application/json"
    }).done(function (res) {
        if(res.IsValid)
            d.resolve()
        else
            d.reject(res.Message); // If res.Message is removed, the reject works.
    }).fail(function (error) {
        console.error("Server-side validation error", error);

        d.reject("Cannot contact validation server");
    });

    return d.promise();
}
从和验证示例中,它看起来像deferred.reject可以将消息作为参数

编辑: 验证回调函数是此DevExtreme选择框中的验证规则:

$.ajax({
        url: "/GetStatuses",
        dataType: 'json',
        cache: false,
        success: function (data) {
            $("#statusId").dxSelectBox().dxValidator({
                validationRules: [{
                    type: "async",
                    validationCallback: function (params) {
                        return myValidationCallback(params.value)
                    }
                }],
                validationGroup: ValidationGroup
            });
        },
        error: function (jqXHR, textStatus, errorThrown) {
            givePersistentFeedback("detailsExceptionFeedback", "danger", getExceptionError(jqXHR));
        }
    });

仅供参考,您不需要手动创建延迟对象。jQuery的
$.ajax()
为您创建了一个函数。您可以演示如何使用
验证回调
函数吗?您如何验证
d.reject(res.Message)
是否不起作用?已更新以显示承诺返回的内容。该验证库似乎存在问题。你试过查看他们的问题列表吗?您的代码看起来与他们的代码相同。唯一需要检查的是,
res.Message
是您希望它记住的,
res.Message
不一定存在。这取决于
ServersideValidationCall()
返回给客户端的内容。仅供参考,您不需要手动创建延迟对象。jQuery的
$.ajax()
为您创建了一个函数。您可以演示如何使用
验证回调
函数吗?您如何验证
d.reject(res.Message)
是否不起作用?已更新以显示承诺返回的内容。该验证库似乎存在问题。你试过查看他们的问题列表吗?您的代码看起来与他们的代码相同。唯一需要检查的是,
res.Message
是您希望它记住的,
res.Message
不一定存在。这取决于
ServersideValidationCall()
向客户端返回的内容。