AJAX函数呼吁成功

时间:2012-07-29 16:39:47

标签: c# javascript jquery ajax

我的javascript代码 -

function updateWhatIfPrivacyLevelRemove(recordId, correspondingDetailIDs) {
    var ajaxCall = $.ajax({ data: { Svc: cntnrRoot,
        Cmd: 'updateWhatIfPrivacyLevel',
        updatePrivacyAction: 'Remove',
        recordID: recordID
        },
        dataType: "text",
        context: this,
        cache: false
    });

    $.when(ajaxCall).then(updateWhatIfPrivacyLevelRemoveSuccess(recordID, correspondingResidentDetailIDs));
}

function updateWhatIfPrivacyLevelRemoveSuccess(recordID, correspondingResidentDetailIDs) {
    //several other lines of non-related code
            $.ajax({ data: { Svc: cntnrRoot,
                Cmd: 'handleResidentRow',
                recordID: 1,
                active: 0
            },
                dataType: "text",
                context: this,
                cache: false
            });
}
在我的C#代码中,我处理'updateWhatIfPrivacyLevel'和'handleResidentRow'的回调。我可以告诉在updateWhatIfPrivacyLevel之前调用handleResidnetRow的AJAX回调。

为什么?

1 个答案:

答案 0 :(得分:2)

当您尝试设置回调时,您实际上是调用该功能。换句话说,你没有将“updateWhatIf ...”函数作为回调传递,你传递的是它的返回值(看起来总是undefined)。

请改为尝试:

$.when(ajaxCall).then(function() {
  updateWhatIfPrivacyLevelRemoveSuccess(recordID, correspondingResidentDetailIDs);
});

对函数名的引用是对函数作为对象的引用,可用于将函数作为回调传递。但是,对( )后面的函数的引用是函数的调用,将对其进行求值,以便可以在周围表达式的上下文中使用返回值。因此,在您的代码中,您将undefined(函数调用的结果)传递给.then()方法,这当然不会达到您想要的效果。

重要的是要记住,jQuery只是JavaScript,特别是JavaScript函数库。虽然.then() 看起来看起来像,但它不是 - JavaScript解释器不会以任何方式特别对待它。

在我的建议中使用匿名函数的替代方法是在较新的浏览器中对Function原型使用.bind()方法。这基本上对你来说是一样的,但它在风格上更像传统的函数式编程。