【发布时间】: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