-1

我有一些在 Ajax 调用后必须返回的数据。在我的.cfc页面上,我有转换数据的逻辑。每列用制表符分隔,每行用 CRLR 分隔。我将cffunction返回格式设置为JSON. 返回数据后,我使用 JavaScript 以所需格式分隔列和行。当我这样做时,我看到很少有人在讨论JSONColdFusion 9 中的各种问题的博客。在我的开发站点上,我使用 ColdFusion 10,但我没有注意到我的数据中有任何问题。但是在现场我有 ColdFusion 9,我想知道这是否会导致一些问题。在我的数据中,我有像地址这样的字段,这个字段允许所有类型的字符。例如,如果您的数据是这样的,coldfusion 9 中的返回类型 JSON 会出现问题2131231D如果字符串和整数的组合以DJSON 结尾,则不会返回相同的数据。所以我的问题是在这种情况下我应该怎么做?这个问题有什么解决办法吗?JSON 是否可靠并推荐在 ColdFusion 9 中使用?我也在寻找一些工具,可以以我可以避免的方式转换我在 .cfc 页面上的数据cffunction returnformat='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);
 });
}
4

1 回答 1

0

保持开发和生产环境尽可能相似是最佳实践。当您将代码推送到生产环境时,它会减少这些类型的“陷阱”。

ColdFusion 10 的 JSON 序列化器/反序列化器比 CF9 有了很大改进。如果您正在使用大量 JSON,那么在生产环境中升级到 CF10 是一个好主意。在这成为可能之前,使用单独的序列化程序会有所帮助。

我怀疑@KevinB 提到了Ben Nadel 的 JsonSerializer.cfc的“json cfc” 。它可在 Github(分叉版本,具有一些额外功能)上获得,网址为https://github.com/kevindb/JsonSerializer.cfc

于 2016-12-09T21:21:58.230 回答