【问题标题】:ColdFusion 9/10 return fromat JSON?ColdFusion 9/10 从 JSON 返回?
【发布时间】:2016-12-01 16:15:43
【问题描述】:

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

【问题讨论】:

  • 我没有遇到你描述的问题,但如果你遇到了,你总是可以切换到使用 json cfc。如果您在生产中使用 CF9,为什么还要在开发中使用 CF10?
  • @KevinB 你有 json cfc 的例子吗?系统存在很多问题,当我们尝试将实时站点更新到 10 时遇到错误。
  • 对我来说奇怪的是你正在从你的函数返回制表符分隔的数据......我不知道coldfusion能够自动将其转换为有用的json。除非它只是把它变成一个字符串,在这种情况下你可能不用担心太多。
  • 启动一个 dev CF9 开发服务器并对其进行测试。这是唯一确定的方法。
  • 我在使用 CF 和 JSON 时遇到的唯一问题有时与隐式转换有关,主要是处理 bigint。如果 CF 想把它变成一个数字,试图强制它成为一个字符串可能会很困难。

标签: javascript json ajax coldfusion cffunction


【解决方案1】:

让您的开发和生产环境尽可能地相似是一种最佳做法。当您将代码推送到生产环境时,它会减少这些类型的“陷阱”。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多