我有一个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>
任何帮助都非常适用, 兰斯
答案 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通过远程返回所有大写字母。我认为通过在所有大写字母中添加“错误”来确保它是正确的。