JSON, возвращенный удаленной функцией CFC, не работает

У меня есть удаленный 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);

Вот данные (переменная 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;
        }
    }
});

Сейчас фокус помещается во второе поле формы, описание, а не в поле проекта.

6
задан James A Mohler 29 November 2012 в 22:40
поделиться