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

问题描述 投票:3回答:1

试图让一个简单的相关选择使用CFC和jquery,它似乎应该工作,但我不断得到未定义的错误。

第一个选择将状态发送到一个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数据:

enter image description here

这个(console.log(results [i] .co_coid);)只是给出了undefined。

我很好奇这是否与dataFilter无法正常工作以及Chrome Dev Tools处理//,但代码没有处理它。如果我查看网络选项卡,我会看到//前缀:

enter image description here

jquery coldfusion cfml
1个回答
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,否则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

© www.soinside.com 2019 - 2024. All rights reserved.