2015-03-13 3 views
2

Недавно я переместил свой код из CF9 в CF11, и у меня возникают проблемы, когда я пытаюсь использовать serializeJSON. Согласно CF документации:ColdFusion 11 Сохранение типа данных во время сериализации

Начиная с ColdFusion 11, сохраняется тип данных во время выполнения кода для запросов и ХФУ.

SerializeJSON рассматривает типы данных, определенные в базе данных для сериализации . Если база данных определяет столбец как строку, любой номер , вставленный в столбец, по-прежнему будет обрабатываться как строка на SerializeJSON.

Но я думаю, это не тот случай ....

Когда я потянув данные из столбца VARCHAR в CF9 он выходит как этот "docid":"123" чего я хочу, но в то же самое CF11 данные выглядят так: "docid":123 и вызывает проблему с тем, что я пытаюсь сделать.

Чтобы быть более конкретным, мои идентификаторы выглядят следующим образом: 2001101009460111385185, который длиннее, чем Javascript может принять, и они преобразуются в научную нотацию. В старом формате у меня не было этой проблемы, потому что мои идентификаторы рассматривались как строка, которую я хочу.

Note: my code is exactly the same on both versions of CF 

У кого-то была эта проблема раньше и КАК вы ее обошли?

Образец кода
Я вызываю эту функцию с помощью вызова AJAX, эта функция возвращает массив со структурой в нем. Когда я сбрасываю возвращаемое значение после того, как я сериализую результат, я вижу объект JSON в моей консоли, но кавычки отсутствуют во всех значениях числа. В тестовом файле я создал простой запрос, а затем я сериализация результаты и все выглядит хорошо ......

<cffunction name="locationData" returnformat="json" access="remote"> 
     <cfargument name="locationid" required="yes" type="string"> 
     <cfargument name="clientBrandid" required="yes" type="string"> 
      <cfscript> 
      locationData = new mod_sigweb.components.xamplifierCFCs.location_info(); 
      result = locationData.getLocation(locationid,clientBrandid); 
      </cfscript>   
     <cfdump var="#serializeJSON(result[1],'struct')#"> 
     <cfabort> 
     <cfreturn #result#> 
    </cffunction> 
+0

Какое обновление CF11 вы используете? Недавно была исправлена ​​ошибка, которая была подобна этому. В случае ошибки он преобразовывал строку «Нет» в значение false после ее сериализации. – haxtbh

+0

ColdFusion 11 Update 4, и в настоящее время нет доступных обновлений. Я создал тестовый файл, и сериализация работает, но когда я отправляю его обратно в javascript из моей функции, удаляет цитаты из любого числового значения. – Geo

+0

Я только что протестировал ошибку, о которой я упоминал в обновлении 4, и кажется, что она все еще сломана. :/ – haxtbh

ответ

0

Неудачный обходной путь, который я должен был использовать для этой ошибки является конкатенировать пространство до конца значения

<cfloop index="i" from="1" to="#ArrayLen(result)#"> 
    <cfset result[i].docid = result[i].docid & " "/> 
</cfloop> 

, а затем JS должен знать об этом (я знаю, что это плохо) и удалите этот замыкающий пробел.