У меня есть следующая проблема, и я надеюсь, что кто-то здесь может подсказать мне более подходящее решение. Сначала я пытаюсь заполнить 12 объектов формы из результатов вызова CF C в ajax. Я, если / иначе над возвращенным набором и заполняя каждое значение объекта DOM по его описанию, возвращенному из CF C, должен быть более простой c способ сделать это. Позвольте мне показать вам компоненты поддержки, а затем вызов ajax, который, я думаю, мог бы быть лучше;
getValue () используется в jQueryUtils. js для вызова SessionMgr.cf c для получения сеанса значение переменной;
function getValue(a) {
var result = undefined;
$.ajax({
url: "cfc/SessionMgr.cfc",
async: false,
type: "get",
dataType: "text",
data: {
method: "getValue",
variablename: a
},
success: function(response) {
result = response;
//console.log('getValue: ', a , ' value: ' , response);
},
error: function(jqXHR, status, error) {
console.log('Error Occurred');
console.log(error);
}
});
return result;
}
, вызывающее SessionMgr.cfc;
<cffunction name="getValue" access="remote" returntype="string" returnformat="plain" output="yes" hint="I get the value of the given user-specific variable.">
<cfargument name="variablename" type="string" required="yes">
<cfreturn session[arguments.variableName] />
</cffunction>
, затем следующий вызов функции;
function getAllNodeValues() {
var lID = getValue('lID');
var nID = getValue('nID');
var rLocation = getValue('rLocation');
var rMonth = getValue('rMonth');
var rYear = getValue('rYear');
var rStartDate = getValue('rStartDate');
var rEndDate = getValue('rEndDate');
$.ajax({
url: "cfc/Nodes.cfc",
type: "get",
async: false,
dataType: "json",
data: {
Method: "GetAllNodeValues",
LineID: lID,
LineNodeID: nID,
DCID: rLocation,
Month: rMonth,
Year: rYear,
StartDate: rStartDate,
EndDate: rEndDate
},
success: function(response) {
$.each(response.DATA, function(i, row) {
// get value of first row as descriptions;
var val = row[0];
var descr = row[1];
// append new options
if(descr == 'IsActive') {
$('#cboNodeIsActive').val(val);
} else if(descr == 'OpCode') {
$('#cboNodeOpCode').val(val);
} else if(descr == 'IsUnits') {
$('#txtNodeIsUnits').val(val);
} else if(descr == 'Fractal') {
$('#cboNodeFractal').val(val);
} else if(descr == 'Ordinal') {
$('#txtNodeOrdinal').val(val);
} else if(descr == 'ParentID') {
$('#cboNodeParentID').val(val);
} else if(descr == 'Constant') {
$('#cboNodeConstant').val(val);
} else if(descr == 'ConstantValue') {
$('#txtNodeConstantValue').val(val);
} else if(descr == 'CurrentBalance') {
$('#txtNodeCurrentBalance').val(val);
} else if(descr == 'EndingBalance'){
$('#xtxNodeEndingBalance').val(val);
} else if(descr == 'CurrentUnits'){
$('#txtNodeCurrentUnits').val(val)
} else if(descr == 'EndingUnits'){
$('#txtNodeEndingUnits').val(val);
}
});
},
error: function(msg) {
console.log(msg);
}
});
}
возвращает этот набор данных; Из-за соглашения об именах моих объектов DOM, похоже, что единственный способ установить их - это если / else'ing во время события $ .each (). Если у кого-то есть лучший способ перейти непосредственно к массиву или какие-либо улучшения по сравнению с тем, как это делается здесь, приветствуется.
, поэтому возвращаемый объект JSON имеет COLUMNS и DATA, как мне это сделать? оцените COLUMNS в if / else, а затем получите значение DATA, соответствующее ссылке на массив?
, поэтому я добавил это к своему успеху: обратный вызов;
var i = 0;
var col = [];
var dat = [];
col = response.COLUMNS;
dat = response.DATA;
console.log('col ', col);
console.log('dat ',dat);
и это результаты консоли:
я не понимаю, почему DATA вложил слой глубже COLUMNS, а затем как сопоставить имя столбца со значением в данных в пары, которые я могу оценить один и установить мой объект DOM для другого?