jQuery $ .Deferred不传递参数

杰森

我需要结合三种方法:

  1. 一个AJAX来检查代码是否存在
  2. 如果代码存在,请确认是否覆盖
  3. 覆写

我编写了三种返回$ .Deferred的方法,以便将它们与.done()链接在一起,如下所示:

function checkFunction() {

    var code = $("#code").val();

    return $.ajax({
        url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/check",
        method: "POST",
        async: false,
        data: {
            "reasonCode": code
        },
        success: function(response, textStatus, jqXHR) {
            var exists = response.dataMap.exists;
            console.log("Code exists: " + exists);
            if (exists == true) {
                return $.Deferred().resolve(true);
            } else {
                return $.Deferred().reject();
            }


        }, error: function() {
            return $.Deferred().reject("AJAX ERROR");
        }
    });
};

var confirmFunction = function(codeExists) {

    console.log("Confirming overwrite");

    if (codeExists == true) {
        var confirm = confirm("Code Exists: Do you wish to overwrite?");
        if (confirm == true) {
            return $.Deferred(true);
        } else {
            return $.Deferred(false);
        }
    } else {
        return $.Deferred(true);
    }

};  

var saveFunction = function() {

    console.log("Saving");

    var code = $("#code").val();

    return $.ajax({
            url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/save",
            method: "POST",
            data: {
                "reasonCode": code
            },
            success: function(response, textStatus, jqXHR) {
                alert("test");
                return $.Deferred(true);
            }

        });
};

然后,我尝试通过此行执行:

checkFunction().done(confirmFunction(codeExists)).done(saveFunction());

不幸的是,我在第一种方法的$ .Deferred上设置的参数没有作为参数传递给ConfirmFunction()。

我究竟做错了什么?

杰森

西尔科

简而言之:很多。

  1. 您尝试return调用success处理程序中使用异步函数内部$.ajax()

  2. 在这里,您传递函数调用结果,而不传递函数的引用作为回调:
    checkFunction().done(confirmFunction(codeExists)).done(saveFunction());
    这应该更像这样:
    checkFunction().done(confirmFunction).done(saveFunction);

  3. confirmFunction()您返回一个新的Deferred对象。您应该做的是创建一个Deferred对象,返回各自的诺言,然后解析/拒绝Deferred对象。因此,例如,您的checkFunction()函数应如下所示:

function checkFunction() {

    var code = $("#code").val();

    // create deferred object
    var result = $.Deferred();

    return $.ajax({
        url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/check",
        method: "POST",
        async: false,
        data: {
            "reasonCode": code
        },
        success: function(response, textStatus, jqXHR) {
            var exists = response.dataMap.exists;
            console.log("Code exists: " + exists);
            if (exists == true) {
                result.resolve(true);
            } else {
                result.reject();
            }


        }, error: function() {
            result.reject("AJAX ERROR");
        }
    });

  return result.promise();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章