[英]Access outer function param without passing in inner function
我有一個函數,它執行異步調用並在成功時調用匿名函數。匿名函數的data
參數用於從服務器收集響應,但它在內部函數內部不可用,除非作為參數傳遞。
callService('POST', getDataInfo, detailData, function (data) {
formDisplayGrid('.accruedGrid', '.accruedTable', 'Total Accrued');//doesn't work.
formDisplayGrid(data,'.accruedGrid', '.accruedTable', 'Total Accrued'); //works
});
callService
只是一個使用jQuery ajax發出調用的函數。
function callService(method, url, data, success) {
var ajaxObject = {
url: url,
method: method,
dataType: 'json',
success: success
}
if (method == 'POST') {
ajaxObject['data'] = data;
}
jQuery.ajax(ajaxObject);
}
formDisplayGrid
函數只是迭代數據集以形成HTML表。
function formDisplayGrid(data, modalSelector, mainGridSelector, totalLabel) {
jQuery(modalSelector).modal();
if (typeof data != 'undefined' && data.Code === 200) {
var mainGrid = jQuery(mainGridSelector);
var tbody = '';
jQuery.each(data['Data']['category'], function (k, v) {
//some code here.
jQuery.each(v['subcat'], function (k, v) {
//some code here.
});
});
//some code here.
mainGrid.find('tbody').html(tbody).fadeIn(1200);
}
}
這是否正在發生,因為匿名函數正在jQuery.ajax
函數中執行,如果匿名函數直接在callService
函數內執行,它應該可用嗎?
這個概念基本上很簡單,你的formDisplayGrid()函數是回調函數的外部函數,因此它不應該訪問該回調函數中的私有變量。但是如果你想要第一種方法工作你將不得不定義函數在回調函數中。
除非這些變量是全局的或者它們在閉包中,否則formDisplayGrid
函數將無法訪問調用它的任何變量。
編輯:你的函數必須從某個地方獲取data
參數 - 否則它將如何知道數據是什么? 有一個很好的理由,只有第二個工作。
EDIT2:這是一個帶閉包的解決方案:
callService('POST', getDataInfo, detailData, function (data) {
function formDisplayGrid(modalSelector, mainGridSelector, totalLabel) {
// you no longer need the data variable
jQuery(modalSelector).modal();
if (typeof data != 'undefined' && data.Code === 200) {
var mainGrid = jQuery(mainGridSelector);
var tbody = '';
jQuery.each(data['Data']['category'], function (k, v) {
//some code here.
jQuery.each(v['subcat'], function (k, v) {
//some code here.
});
});
//some code here.
mainGrid.find('tbody').html(tbody).fadeIn(1200);
}
}
formDisplayGrid('.accruedGrid', '.accruedTable', 'Total Accrued');//should work.
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.