0

私は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 を呼び出して情報を取得できると思いますが、できません。firedog で 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>

どんな助けでも大歓迎です、ランス

4

2 に答える 2

2

まず、JSON を使用します (デフォルトは WDDX です。これは死んだよりも死んだものです)。それには2つの方法があります。returnformat="json" を cffunction に追加するか、$.ajax(url="...?returnformat=json"

次に、jQuery $.post または $.ajax を使用して、コールバック関数を正しく設定する必要があります。

于 2010-01-20T22:25:04.640 に答える
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() メソッドは、フォーム変数に URL パラメータと同じ名前を付けているため、JavaScript を大幅に簡素化します。

JavaScript では大文字と小文字が区別されますが、Coldfusion では区別されないことに注意してください。Coldfusion はリモート経由ですべて大文字で返すと思います。「ERROR」をすべて大文字にすることで、正しいと思います。

于 2010-01-20T23:22:10.217 に答える