2016-12-01 3 views
-1

У меня есть данные, которые я должен вернуть после вызова Ajax. На моей странице .cfc у меня есть логика, которая преобразует данные. Каждый столбец разделен на вкладку, и каждая строка разделяется CRLR. У меня есть cffunction returnformat, установленный на JSON. После того, как я верну данные, я использую JavaScript для разделения столбцов и строк в желаемом формате. В то время как я делал это, я видел несколько блогов, где люди говорили о всех проблемах с JSON в ColdFusion 9. На моем сайте разработки я использую ColdFusion 10, и я не заметил никаких проблем с моими данными. Но на живом сайте у меня ColdFusion 9, и мне было интересно, не вызовет ли это некоторые проблемы. В моих данных у меня есть поля, такие как Address, и это поле позволяет использовать все типы символов. Тип возврата JSON в coldfusion 9 имеет проблему, если ваши данные похожи на это, например, 2131231D, если комбинация строк и целых чисел заканчивается D JSON не вернет те же данные. Итак, мой вопрос - что я должен делать в этой ситуации? Есть ли какое-либо исправление для этой проблемы? Является ли JSON надежным и рекомендуется использовать в ColdFusion 9? Я искал также инструмент, который будет конвертировать мои данные на страницу .cfc таким образом, я могу избежать cffunction returnformat='JSON'. Вот мой код:Возврат ColdFusion 9/10 из JSON?

<cfcomponent> 
    <cffunction name="getData" access="remote" output="true" returnformat="JSON"> 
     <cfset fncResults = StructNew()> 

     <cfif myFile = true> 
      <cfoutput query="myData"> 
       //Here I organize my data 
      </cfoutput> 

      <cfset getList = arrayToList(buffer,crlf)/> 
      <cfset fncResults.status = "200"> 
      <cfset fncResults.fileData = #getList#> 
     <cfelse> 
      <cfset fncResults.status = "400"> 
      <cfset fncResults.message = "The file was not properly uploaded."> 
     </cfif> 

     <cfreturn fncResults> 
    </cffunction> 
</cfcomponent> 

Вот мой JavaScript:

function getFile(){ 
    $.ajax({ 
    type: 'POST', 
    url: 'Components/test.cfc?method=getData', 
    data: new FormData($('#myForm')[0]), 
    cache: false, 
    dataType: 'json' 
}).done(function(obj){ 
    if(obj.STATUS === 200){ 
     return obj.FILEDATA; 
    }else{ 
     return false; 
    } 
}).fail(function(jqXHR, textStatus, errorThrown){ 
    alert(errorThrown); 
}); 
} 
+1

Я не сталкивался с проблемой, которую вы описываете, но если вы это делаете, вы всегда можете переключиться на использование json cfc. Почему вы используете CF10 в dev, если у вас CF9 в производстве? –

+0

@KevinB У вас есть пример json cfc.? Много проблем в системе, и мы получали ошибки, когда пытались обновить сайт в реальном времени до 10. –

+0

Мне кажется странным, что вы возвращаете данные с разделителями табуляции из своей функции .... я не знал coldfusion сможет преобразовать это автоматически в полезный json. Если только это не превратит его в строку, и в этом случае вам, вероятно, не о чем беспокоиться. –

ответ

0

Поддержание вашей разработки и производственной среды как можно более близкими друг к другу является передовой практикой. Он уменьшает эти виды «gotchas», когда вы нажимаете код на Production.

Серийный анализатор/десериализатор JSON ColdFusion 10 значительно улучшен по сравнению с CF9. Если вы работаете с большим количеством JSON, то лучше перейти на CF10 на Production. Пока это возможно, использование отдельного сериализатора может помочь.

Я подозреваю, что «json cfc», что @KevinB упомянул Ben Nadel's JsonSerializer.cfc. Он доступен на Github (раздвоенная версия с несколькими дополнительными функциями): https://github.com/kevindb/JsonSerializer.cfc

Смежные вопросы