구조체를 반환하는 원격 CFC가 있습니다. cfajaxproxy를 사용하여 호출됩니다. JSON 객체가 처음으로 구조체에 들어오는 JSON을 순서대로 정렬해야합니다. 그러나 반환 된 JSON은 혼란스러운 순서로 존재합니다.원격 CFC 함수에서 반환 된 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);
게시 요청의 함수로 전송되는 데이터입니다 (위 변수는 위 참조).
{"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;
}
}
});
지금은 프로젝트 필드 대신 설명의 두 번째 필드에 초점을 맞 춥니 다.
가능한 복제 http://stackoverflow.com/questions/4515676/keep-the-order-of-the-json-keys-during-json-conversion-to-csv –