gpt4 book ai didi

jquery - 从远程 CFC 函数返回的 JSON 乱序

转载 作者:行者123 更新时间:2023-12-03 22:44:37 24 4
gpt4 key购买 nike

我有一个返回结构的远程 CFC。使用 cfajaxproxy 进行调用。我希望返回的 JSON 按顺序排列,即首先进入结构,然后进入 JSON 对象。但是,返回的 JSON 的顺序是困惑的。

这是远程功能。

<cfcomponent displayname="validation" hint="">
<cffunction name="validateForm" displayname="validateForm" hint="" access="remote" verifyClient="yes" returntype="struct">

<cfargument name="formVals" type="struct" required="yes">

<cfset errors = StructNew()>

<cfif formVals.project neq "project">
<cfset errors["project"] = "Invalid project name." />
</cfif>

<cfif Len(formVals.description) eq 0>
<cfset errors["description"] = "Please enter a description." />
</cfif>

<cfif StructIsEmpty(errors)>
<cfset errors["message"]["type"] = "success">
<cfset errors["message"]["text"] = "Client and server-side validation passed successfully.">
<cfset errors["areErrors"] = false>
<cfelse>
<cfset errors["message"]["type"] = "validation">
<cfset errors["message"]["text"] = "Please fix the errors, and resubmit.">
<cfset errors["areErrors"] = true>
</cfif>

<cfreturn errors />

</cffunction>
</cfcomponent>

这是我在表单页面顶部设置的 cfajaxproxy。

<cfajaxproxy cfc="validation" jsclassname="validation">

这是在我的表单的 onSubmit 处理程序中对远程函数进行的调用。

var v = new validation();
v.setHTTPMethod("POST");
var errors = v.validateForm(o);

这是发送到 post 请求中的函数的数据(上面的变量)。

{"formVals":{"project":"","description":""}}

这是从函数返回的 JSON 响应。

{"message":{"text":"Please fix the errors, and resubmit.","type":"validation"},"description":"Please enter a description.","project":"Invalid project name.","areErrors":true}

我希望响应的顺序与创建结构的顺序相同,如下所示。

{"project":"Invalid project name.","description":"Please enter a description.","message":{"text":"Please fix the errors, and resubmit.","type":"validation"},"areErrors":true}

这样,当我迭代响应时,我可以将焦点设置到第一个有错误的表单字段。

var focusSet = false;

$.each(errors, function(key, val){
//alert(key + ': ' + val);
if(key != 'message' && key != 'areErrors') {
var fi = $('#' + key).parents('.formItem').filter(':first');
fi.addClass("inError");
fi.find('.err').filter(':first').html(val);
if(!focusSet) {
$('#' + key).focus();
focusSet = true;
}
}
});

现在,这会将焦点放在表单的第二个字段“描述”中,而不是项目字段中。

最佳答案

ColdFusion 结构体的键永远不会以任何特定顺序存储。然而,我found one post它展示了如何创建 java LinkedHashMap(这是 CF Struct 下的 java)来按特定顺序存储和检索键。

<cfset pets = CreateObject("java", "java.util.LinkedHashMap").init()>
<cfscript>
pets["Cat Name"] = "Leo";
pets["Dog Name"] = "Meatball";
pets["Fish Name"] = "Lil Fish";
pets["Bird Name"] = "PePe";
pets["Snake Name"] = "Sizzle";
</cfscript>
<cfloop collection="#pets#" item="key" >
<cfoutput>
#key#: #pets[key]#<br/>
</cfoutput>
</cfloop>

编辑:丹的解决方案(数组而不是结构)可能会容易得多。

关于jquery - 从远程 CFC 函数返回的 JSON 乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com