尝试使用 CFC 和 jquery 获得一个简单的相关选择,看起来它应该可以工作,但我不断收到未定义的错误。
第一个选择将状态发送到 CFC,该 CFC 返回 ID 和大学名称数组 - 这似乎有效(仅显示 ajax 调用,因为它在这里工作正常)
$.ajax({
method: 'post',
dataType: 'json',
url: compath + '/remote.cfc',
data: {
method: 'querySchoolsByState',
returnFormat: 'json',
school_state: $selStateShort
},
dataFilter: function(data, type){
//CF has // set as security prefix
return type == 'json' ? data.replace(/^(\/{2})?/, '') : data;
},
success:
function(results,status,xhr){
var $schoolSelect = $('#school');
$schoolSelect.find('option:not(:first)').remove();
if (results.length){
console.log(results.length);
console.log(results);
$.each (results, function(i){
console.log(results[i].co_coid);
$collegeSelect.append('<option value="' + results[i].co_coid + '">' + results[i].co_name + '</option>');
});
前两个控制台日志按预期工作 - 长度和实际 json 数据:
这个 (console.log(results[i].co_coid);) 只是给出未定义。
我很好奇这是否与 dataFilter 不工作和 Chrome Dev Tools 处理//相关,但代码没有处理它。如果我查看网络选项卡,我确实看到了//前缀:
最佳答案
我将快速说明 ColdFusion 函数如何处理区分大小写(尤其是 JSON)。
<cfscript>
function testJSON() returnFormat="JSON" {
var retVal = {
imlower : "lowercase" ,
IMUPPER : "UPPERCASE" ,
ImMixed : "Mixed Case" ,
"ImQuoted" : "Quoted Case"
} ;
return serializeJSON(retVal) ;
}
function testNoJSON() {
var retVal = {
imlower : "lowercase" ,
IMUPPER : "UPPERCASE" ,
ImMixed : "Mixed Case" ,
"ImQuoted" : "Quoted Case"
} ;
return retVal ;
}
writeDump(testJSON());
writeDump(testNoJSON());
</cfscript>
这将返回 JSON 字符串
{"IMUPPER":"UPPERCASE","IMMIXED":"Mixed Case","IMLOWER":"lowercase","ImQuoted":"Quoted Case"}
和 ColdFusion 结构。两者都显示大写的键名(引用时除外)。因此,CF 将大写键,除非它们被引用。由于应用程序可能与许多不同类型的技术或系统交互,这些技术或系统以不同的方式处理区分大小写,因此了解变量从函数中出来时的样子很重要。如果您要使用 Javascript(区分大小写),有时将所有变量都设为大写是个好主意,这样您在实际传递
ImMixed
时就不会认为自己传递了 IMMIXED
。https://cffiddle.org/app/file?filepath=97aaf3fa-4cd5-4579-9ee8-2fa1314d3304/d8e80b02-8ebb-40b2-8be8-1a08ff36c343/d0e94bc5-d19b-424c-9cd4-cab999c4c8df.cfm
关于jquery - ColdFusion 从 jquery 中的 CFC 返回数据以构建相关的选择不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55939134/