ColdFusion возвращает данные из CFC в jquery для создания связанного выбора, не работающего - PullRequest
3 голосов
/ 01 мая 2019

Попытка получить простой связанный выбор, работающий с CFC и jquery, и кажется, что он должен работать, но я продолжаю получать неопределенные ошибки.

Первый выбор отправляет состояние CFC, который возвращаети массив идентификаторов и названий колледжей - кажется, что это работает (просто показывает вызов 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);) просто дает неопределенное значение.

I 'Мне интересно, связано ли это с тем, что dataFilter не работает и Chrome Dev Tools обрабатывает //, но код не обрабатывает его.Если я смотрю на вкладку Сеть, то вижу префикс //:

enter image description here

1 Ответ

2 голосов
/ 01 мая 2019

Я кратко проиллюстрирую, как функции 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

...