1

私はColdFusionアプリケーションでModelGlueとともにAjaxを使用しています。値を返すためにAjax呼び出しを行いたい。ビューをレンダリングしたくありません。データベースとのやり取りが必要で、値を戻したいだけです。

私のAjax呼び出し:

new Ajax.Request(root+'test.testFunction',{
  method: 'post',
  parameters: {param1:paramval},
  onSuccess: function(response){
    alert(response.responseText);
    var myresult = response.responseText;
  }
});

私のmodelglueイベント:

<event-handler name="test.testFunction">
     <broadcasts>
          <message name="testFunction" />
     </broadcasts>
</event-handler>

と私のコントローラー機能:

<cffunction name="testFunction" returnType="any" output="true" >
     <cfargument name="event" type="any" required="true">
        <cfset justtest = 1>
     <cfreturn justtest>
</cffunction>   

プロトタイプをajaxライブラリとして使用しています。

responseTextに警告すると、null値が返されます。このbcozは、イベントハンドラーにビューパーツを含めていませんか?ビュー部分を含めた場合、やりたくない新しいページを作成する必要があります。ビューをレンダリングせずにajax呼び出しでサーバー値だけを取得することは可能ですか?上記のシナリオに従って、myresult値を1にします。

plsは役立ちます。助けを求めるThnx。

4

4 に答える 4

3

あなたが「ただ価値を取り戻したい」と言うとき、それはあなたの「見方」です。あなたがしたいのは、値を吐き出すだけのリモート(ajax)イベント用の特別なビューを使用することです。たとえば、JSONを返す場合は、次のようにします。

イベント構成:

<event-handler name="test.testFunction">
     <broadcasts>
          <message name="testFunction" />
     </broadcasts>
     <views>
          <include name="body" template="renderJson.cfm" />
     </views>
</event-handler>

コントローラ機能:

<cffunction name="testFunction" returnType="any" output="true" >
     <cfargument name="event" type="any" required="true">
     <cfset event.setValue('justtest', 1) />
</cffunction>

renderJson.cfm:

<cfoutput>#serializeJson(event.getValue('justtest'))#</cfoutput>

Model-Glue 3を使用している場合は、新しいイベント形式機能を使用して、別のビュー形式で同じことを行う既存のイベントにこのajaxビューをピギーバックできます。

于 2009-08-06T13:24:43.827 に答える
1

コントローラ機能の最後にこれを使用してみてください。

<CFCONTENT TYPE="text" RESET="Yes"><CFOUTPUT>#serializeJSON(justTest)#
<cfset request.modelGlueSuppressDebugging = true />
<cfsetting showdebugoutput="false" /></CFOUTPUT><cfabort>

だからこのように:

<cffunction name="testFunction" returnType="any" output="true" >     
<cfargument name="event" type="any" required="true">        

<cfset justtest = 1>

<CFCONTENT TYPE="text" RESET="Yes"><CFOUTPUT>#serializeJSON(justTest)#
<cfset request.modelGlueSuppressDebugging = true />
<cfsetting showdebugoutput="false" /></CFOUTPUT><cfabort>

</cffunction>

これにより、現在のビューが保持され、「justTest」がjsonとして返されます。

Firefoxを使用している場合は、サーバーからの応答を確認できるはずです。

于 2009-08-07T02:43:14.810 に答える
0

警告:Coldfusion 8で、application.cfcにOnRequest()がある場合、関連する既知のcf8バグがある可能性があります。回避策については、 http://www.coldfusionjedi.com/index.cfm/2008/3/19/Ask-a-Jedi-Ajaxbound-requests-and-onRequestを参照してください。

于 2011-06-01T00:51:16.940 に答える
-1

この状況では、MVCフレームワークをバイパスして、サービスのリモートプロキシを実際に呼び出す必要があります。:)

<cfajaxproxy>ああ、 CF8を使用している場合は使用できることを忘れないでください。

于 2009-08-06T18:04:19.527 に答える