2012-03-02 8 views
6

データの構造体であるColdFusionセッション変数があります。私の目標は、Ajaxを介して、2つのうちのいずれかを行うjQueryの呼び出しを実行することです:JQueryを使用したColdFusion構造の受け渡し

  1. は、新しく作成された文字列とその構造の要素を更新し、同じ構造体を返し、ColdFusionコンポーネントメソッドにそのColdFusion構造体を送信しますバック。

又は

  1. は、新しい文字列を生成するColdFusionコンポーネントのメソッドを実行し、その文字列を返し、Ajaxの呼び出しの後、同じColdFusionセッション構造の要素への新しい文字列を割り当てます。

私はそれが簡単だと思いますが、私はいくつかの問題を抱えています。誰が私が何をする必要があるか知っていますか?

答えて

10

CFセッション構造とjQueryは、サーバー上のCFとブラウザ内のjQueryという2つの異なる領域で動作します。 AjaxからColdFusion構造体を[cfc]に送信するには、セッション構造体をjson文字列としてシリアル化してから、そのjson文字列をクライアントに送信しなければなりません。ほとんどの場合、あなたはクライアントにページのレンダリングの一部としてこれを行うことになるでしょう:(実際のJSオブジェクトとして)必要に応じて

<cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput> 

次に、あなたのjQueryのコードからjsonStruct変数を使用することができます。あなたには、いくつかのブラウザ IE 咳以来、シリアライズを行うにはjson2.jsを含める必要があり

$.ajax({ 
    url: "foo.cfc?method=myMethod", 
    dataType: "json", 
    data: {myStruct: JSON.stringify(jsonStruct)}, 
    success: function (respJSON) { 
     jsonStruct = respJSON; 
    } 
}); 

注:CFに戻ってそれを送信する必要がある場合、あなたはそのようには、JavaScript側で再びそれをシリアル化することができますはネイティブにJSON.stringify()をサポートしていません。

更新

私はあなたがCFCからの応答を使用するためにはJavaScriptオブジェクトを更新する方法を示すために、例のjqueryのコードを更新しました。正しく動作させるためには、CFは次のようにする必要があります。

<cffunction name="myMethod" access="remote" returnFormat="json"> 
    <cfargument name="myStruct" type="string"> 

    <cfset var realStruct = DeserializeJSON(arguments.myStruct)> 

    <cfset session.myStruct = realStruct><!--- or whatever you want to do with it at this point ---> 

    <cfreturn session.myStruct> 
</cffunction> 
+0

したがって、私はSerializeJSONを使ってCFコンポーネントに送るjsonStructを作成します。 JSON.stringifyは、CFの構造を正しいものにしますか?成功した構造を返すとき、元のページの現在のセッション構造に変更されたセッション構造を戻す方法を教えてください。 – user1100412

+0

SerializeJSONは、CFオブジェクトを取得して文字列としてレンダリングするCF関数です。 JSON.stringifyは、javascriptオブジェクトを受け取り、それを文字列としてレンダリングするjavascript関数です。 –

+0

CFCとjQueryのやりとりの方法を示すために答えを更新しました。 –

関連する問題