我正在尋找我繼承的網站中的錯誤,並且我的調查提出了一個有趣的JavaScript範圍問題。下面的代碼已被簡化,只顯示相關的細節。javascript函數參數的值如何在頁面請求中存活?
下面的通用服務有一個問題,它有時在註銷後沒有返回任何數據(當然只在生產環境中)。當發生這種情況時,我們看到ApplyToolbarBindings的「data」參數不是null或者是一個空對象 - 它實際上是從前一個頁面請求的狀態提供的。該對象的狀態通過asp.net回發存活,換句話說,最終效果是工具欄即使在註銷後也顯示「已知」用戶。
function ApplyToolbarBindings(data) {
if (!data.IsKnown) {
jQuery("#ToolBar").attr("data-bind", 'template: { name: "AnonymousUserToolbarTemplate" }');
} else {
jQuery("#ToolBar").attr("data-bind", 'template: { name: "KnownUserToolbarTemplate" }');
}
ko.applyBindings(data, document.getElementById('ToolBar'));
}
function GetToolBarData(callbackFunction) {
jQuery.ajax({
url: '/Services/Toolbar/ToolBarService.ashx?v=' + toolbarV,
success: callbackFunction,
dataType: 'json',
type: 'GET'
});
}
function loadToolbar() {
GetToolBarUserData(ApplyToolbarBindings);
}
jQuery(function() { loadToolbar(); });
什麼是當該功能已在全球定義的參數傳遞給函數的生命週期?這種行爲是因爲沒有數據返回時,ajax對象的狀態是不變的?
唯一的辦法是通過獲取請求發送任何值到目標頁面。 – KBN