尝试使用 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 数据:

jquery - ColdFusion 从 jquery 中的 CFC 返回数据以构建相关的选择不起作用-LMLPHP

这个 (console.log(results[i].co_coid);) 只是给出未定义。

我很好奇这是否与 dataFilter 不工作和 Chrome Dev Tools 处理//相关,但代码没有处理它。如果我查看网络选项卡,我确实看到了//前缀:

jquery - ColdFusion 从 jquery 中的 CFC 返回数据以构建相关的选择不起作用-LMLPHP

最佳答案

我将快速说明 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/

10-12 16:56