Использование CF 10. Чтобы повторно заполнить выбор без обновления всей страницы, я делаю удаленный вызов cfc при изменении выбора, который запускает запрос и возвращает его в формате JSON. В моем обратном вызове $ .post() я беру этот текст JSON и сразу же использую JSON.parse(), чтобы преобразовать его в объект JS. Итак, теперь у меня есть объект JS, содержащий 2 массива: COLUMNS, который является массивом всех имен столбцов, и DATA, который представляет собой массив массивов, каждый массив представляет строку в запросе. Поэтому каждое поле в запросе - DATA [rownumber] [columnnumber].Как использовать JSON, возвращаемый с ajax coldfusion cfc call
То, что я пытаюсь выяснить, является самым элегантным способом обработки этого объекта JS. я могу просто просто перебрать его с помощью $ .each() и заполнить параметры select, но что, если я хочу сортировать набор результатов по одному или нескольким столбцам? Или обратитесь к полям по имени их столбца? Мне интересно, лучше ли мне что-то делать внутри cfc, прежде чем возвращать qry, например, преобразовать его в структуру. Ниже приведен мой код функции cfc:
<cffunction name="getStaffRemote" access="remote" returntype="query" returnformat="JSON" output="false">
<cfargument name="iEmpId" type="any" required="false" />
<cfset var qry= "" />
<cfquery name="qry" datasource="#this.DSN#">
SELECT iEmpid, vEmpLname, vEmpFname, isActive
FROM tEmployees
where 1=1
<cfif isDefined("arguments.iEmpId") AND isNumeric(arguments.iEmpId) AND arguments.iEmpId GT 0>
AND iEmpId = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.iEmpId#" />
</cfif>
</cfquery>
<cfreturn qry />
</cffunction>
Спасибо за ваши мысли. Кстати, мне также интересно, почему запрос принимает this.DSN, который является просто копией application.dsn. Я думал, что переменные области приложения недоступны для функции, когда она вызывается непосредственно удаленным, то есть «$ .post ('myCFC.cfc? Method = getStaffRemote & ...'"
(Ответить на ответ):.
Очень приятно - спасибо, я буду помнить это для больших запросов в этом случае, я в конечном итоге с помощью возвращаемого JSON как с JQuery - просто сделать, так как есть только несколько столбцов:
$.get("cfc/employees.cfc?method=getStaffRemote&vActive=" + vActive,
function(jsonText){
var qryStaff = JSON.parse(jsonText);
//qryStaff is now an object with 2 arrays: COLUMNS and DATA.
//COLUMNS is an array of strings of the column names.
//DATA is an array of arrays, where each array is a row.
//Thus, every data cell is DATA[rownumber][columnnumber]
//[0] = iEmpId
//[1] = vEmpLName
//[2] = vEmpFName
//[3] = isActive
$('#iEmpID_Staff').empty();
$.each(qryStaff.DATA, function() {
$('#iEmpID_Staff').append('<option value=' + $(this)[0] + '>' + $(this)[1] + ', ' + $(this)[2] + '</option>');
});
}
);
Я не вижу никаких переменных области приложения. Что касается вопроса сортировки, я предлагаю сделать это в запросе. Если есть условная логика, передайте соответствующий аргумент функции. –
Завершите запрос на стороне сервера и выполните что-то вроде 'ArrayAppend (local.retArray, {col1 = qry.col1, cols2 = qry.col2})' возвращаем массив вместо запроса. –
(Edit) Если вам нужны результаты, отсортированные определенным способом, используйте массивы или запрос. Структуры не имеют гарантированного порядка сортировки. – Leigh