我如何使用从jquery中的cfc返回的结构

时间:2010-01-20 22:04:14

标签: jquery coldfusion struct cfc

我有一个cfc

<cffunction name="addEditPerson" access="remote" returntype="struct">
a bunch of cfarguments

<cfscript>
            var returnThis = structNew();
            var error = '';
            structInsert(returnThis,'success',0,true);
            structInsert(returnThis,'error','',true);
            structInsert(returnThis,'personID',arguments.personID,true);
            if (trim(arguments.fname) == ''){error=error&'<li>Enter a First Name</li>';}
            if (trim(arguments.lname) == ''){error=error&'<li>Enter a Last Name</li>';}
            if (len(trim(arguments.username)) lt 5){error=error&'<li>Enter a User Name (at least five(5) characters long)</li>';}
            if (trim(arguments.password) == ''){arguments.canLogin = false;}
            if (error != ''){
            structUpdate(returnThis,'error',error);
            return returnThis;
        }
</cfscript>

cfc显然有更多,但我似乎无法从结构中返回错误 我正在使用这个jquery语句:

$("#addNewPerson").click(function(){
            var fName = $("#newPersonFname").val();
            var lName = $("#newPersonLname").val();
            var companyName = $("#newPersonCompanyName").val();
            var userName = $("#newPersonUserName").val();
            var roleID = $("#newPersonRole").val();
            var dataStr = 'fName='+fName+'&lName='+lName+'&companyName='+companyName+'&userName='+userName+'&roleID='+roleID;
              $.ajax({
                  type:"POST",
                  url:"/cfc/people.cfc?method=addEditPerson&returnformat=json",
                  data: dataStr,
                  cache:false,
                  success: function(msg) {
                  $("#newPersonError").html(msg.ERROR);
                  }
              });

        });

但是在成功声明中我不知道如何进入cfc返回的结构。我想我可以调用msg.error并获取信息,但我不能。我在firedox中使用firebug,我可以看到POST请求它,但响应完全为空。我不知道它是否有所作为,但这是表格:

<div id="personForm">

    <div class="pageHeader">Add New Person</div>
    <div id="newPersonError"></div>
    First Name : <input id="newPersonFname" type="text" name="newPersonFname" value=""><br/>
    Last Name : <input id="newPersonLname" type="text" name="newPersonLname" value=""><br/>
    User Name : <input id="newPersonUserName" type="text" name="newPersonUserName" value=""><br/>
    Company Name : <input id="newPersonCompanyName" type="text" name="newPersonCompanyName" value=""><br/>
    Role : <select id="newPersonRole" name="newPersonRole">
                <option value="0">Select person's role<cfoutput query="roleList"><option value="#roleID#">#role#</cfoutput>
            </select><br/>
    <input id="addNewPerson" type="button" name="addPerson" value="Add New Person">
</div>

任何帮助都非常适用, 兰斯

2 个答案:

答案 0 :(得分:2)

首先,使用JSON(默认为WDDX,这是deader而不是死)!有两种方法可以做到这一点。在cffunction或$ .ajax中添加returnformat =“json”(url =“...?returnformat = json”

然后应该使用jQuery $ .post或$ .ajax,并设置回调函数。

答案 1 :(得分:0)

我会在带有id的输入周围使用表单标记。

<div id="container">
<form id="personForm">
    ...
</form>
</div>

确保已为该CFC关闭或禁止Coldfusion调试。调试将破坏返回的json数据。

此外,创建标准CFM页面,初始化cfc,并cfdump对页面正文中的函数的调用。确保您对输出感到满意。如果结构中存在任何错误,则使用jQuery和firebug进行调试会更容易。一旦它工作,然后从jQuery调用它。

您可以简化您的jQuery语句:

var peopleUrl = '/cfc/people.cfc?method=addEditPerson';

$.post(peopleUrl, $('#personForm').serialize(), function (msg) {
    $("#newPersonError").html(msg.ERROR);       
}, "json");

jQuery的.serialize()方法将大大简化您的javascript,因为您已将表单变量命名为与url params相同。

请记住,javascript是区分大小写的,而Coldfusion则不是。我相信Coldfusion通过远程返回所有大写字母。我认为通过在所有大写字母中添加“错误”来确保它是正确的。