0

現在、処理にcfcを使用するかなり標準的なお問い合わせフォームがあります。javascriptをオンにしているユーザーには.postを使用したいと思います。フォーム要素のjQueryを使用して配列を作成し、それを同じCFCに(CFCを変更せずに)渡したいのですが、その方法がわかりません。基本的に、「formData」と呼ばれるものを引数としてCFCに渡し(基本的なサーバー側のコードだけで行うように)、それをCFCで解析します。現在、私はcfcでcfdumpを使用しています(これはJava以外の送信で正常に機能します)が、この設定では機能しません。何か案は?

これが私のjQueryです

$('#theForm').submit(function(e) {
    e.preventDefault();

    var formData = {};
    $('form [name]').each(function(){
        formData[this.name] = this.value;
    });
    $.post("cfc/engine.cfc?method=collectdata&returnformat=json",
           {'formData': formData}
           );
});

そして私のCFC

<cffunction name="collectdata" access="remote" output="false" returntype="void">
  <cfargument name="formData" type="struct" required="yes">
  <cfdump var="#formData#">
  <cfabort>
</cffunction>
4

2 に答える 2

1

これは、24時間年中無休でサーバーがあればいいのにと思ったときのもう1つのことです...

CFCを詳しく見ると、formDataを構造体にする必要があるようです。ただし、IIRC、JSONは文字列と見なされるため、手動で逆シリアル化する必要があります。

タイプを文字列に変更するか、完全に削除してみてください。

編集: jquery.post()は、AJAX / webservice呼び出しではなく、標準のhttp投稿を送信するようです。したがって、散在するすべてのドキュメントを正しく理解していれば、コンテンツはフォームスコープに入れられます。

于 2010-08-25T19:55:47.520 に答える
0

JavaScript配列をJSONにシリアル化して準備します。これを行う簡単で厳密な方法は、Crockfordのjson2jsを使用することです。だからあなたは持っているでしょう:

<script src="json2.js"></script>

...その後:

var your_params = [ 'this','that','theother' ]; // your js array
var s_params = JSON.stringify( your_params ); // now as json

...そしてあなたの.post()

{'formData': s_params}

stringタイプ(または)の引数を受け取るようにcfcを設定しますany。cfcで、deserializeJson()次の引数を使用します。

<cffunction name="collectdata" output="false" access="remote" returntype="void">
  <cfargument name="formData" type="string" required="yes">
  <cfset var result = deserializejson(arguments.formData)><!--- make a CF array --->
  <cfset var foo = isArray(result)> <!--- TRUE! --->
  <!--- ... etc ... --->
</cffunction>

つまり、JavaScript配列を取得し、JSONにシリアル化し、文字列として受信したcfcに送信してから、「ネイティブ」CF配列に逆シリアル化しました。同じことが、JavaScriptとCFの間でそれぞれjsオブジェクト/構造体を転送する場合にも機能します(この例の単純な配列とは対照的です)。

于 2010-08-25T23:31:14.350 に答える