尝试使用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开发工具处理//,但代码未处理它有关。如果我查看“网络”标签,就会看到//前缀:
答案 0 :(得分:2)
我将快速说明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
。