我的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回调。
为什么?
答案 0 :(得分:2)
当您尝试设置回调时,您实际上是调用该功能。换句话说,你没有将“updateWhatIf ...”函数作为回调传递,你传递的是它的返回值(看起来总是undefined
)。
请改为尝试:
$.when(ajaxCall).then(function() {
updateWhatIfPrivacyLevelRemoveSuccess(recordID, correspondingResidentDetailIDs);
});
对函数名的引用是对函数作为对象的引用,可用于将函数作为回调传递。但是,对( )
后面的函数的引用是函数的调用,将对其进行求值,以便可以在周围表达式的上下文中使用返回值。因此,在您的代码中,您将undefined
(函数调用的结果)传递给.then()
方法,这当然不会达到您想要的效果。
重要的是要记住,jQuery只是JavaScript,特别是JavaScript函数库。虽然.then()
看起来看起来像,但它不是 - JavaScript解释器不会以任何方式特别对待它。
在我的建议中使用匿名函数的替代方法是在较新的浏览器中对Function原型使用.bind()
方法。这基本上对你来说是一样的,但它在风格上更像传统的函数式编程。