Как я могу работать со структурой, возвращенной из CFC в JQuery - PullRequest
0 голосов
/ 21 января 2010

у меня есть 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 и получить информацию, но не могу. Я использую firebug в firedox и вижу, что запрос 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>

Любая помощь очень ценится, Lance

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Во-первых, используйте JSON (по умолчанию WDDX, который глубже мертвого)! Есть два способа сделать это. Либо добавьте returnformat = "json" в функцию или в $ .ajax (url = "...? Returnformat = json"

Тогда нужно использовать jQuery $ .post или $ .ajax и правильно настроить функцию обратного вызова.

0 голосов
/ 21 января 2010

Я бы использовал тег формы вокруг входов с идентификатором.

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

Убедитесь, что отладка Coldfusion отключена или подавлена ​​для этого CFC.Отладка будет искажать возвращаемые данные 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");

.serialize () метод jQuery значительно упростит ваш JavaScript, поскольку вы назвали свою формуВарьируется так же, как ваши параметры URL.

Помните, что javascript чувствителен к регистру, а Coldfusion - нет.Я считаю, что Coldfusion возвращает все заглавные буквы через пульт.Я думаю, что вы правильно поняли «ОШИБКА» во всех заглавных буквах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...