2012-01-27 21 views
0

編集内側から動作しません。重要な部分は、私は、AJAXを介したCFCメソッドを呼んでいるということかもしれません...投げるエラー - cflocationのはONERROR()

私は介して、CFCメソッドを呼んでいますajax:jqgrid表で使用するデータを戻します。 cfcのメソッドの中で、私はエラー処理を設定しようとしているので、ユーザーに問題がないことを知らせる代わりに、ルートディレクトリのerror.cfmとして定義されているエラーページにユーザーを送ります、そして今はちょうどいくつかの定型的なHTMLが含まれています。 インサイドApplication.cfcのは、私は同じように私のonError()メソッドを定義しました:のcfcatch内部かどうか

<cffunction name="onError" returnType="void" output="false" > 
    <cfargument name="exception" required="true" > 
    <cfargument name="eventname" type="string" required="true" > 

    <cfmail to="#application.REGISTRATION_NOTIFICATION#" from="outgoing address" subject="Error"> 

    </cfmail> 

    <cflocation url="../index.cfm?file=error.cfm" addToken="false" /> 

私は、CFCのメソッドからのエラーをスローし、Chromeはことを報告してI実際にはSTATUS = 200でindex.cfmに送信され、その応答はerror.cfmテンプレート内にあるhtmlを正しく示しています。ただし、ブラウザは実際にページに移動しません。

事は、私が

<cflocation url="index.cfm?file=error.cfm" addToken="false" /> 

に場所を変更し、CFCを呼び出したページから、代わりのCFCからエラーを投げる場合に予想されるとして、cflocationのは、仕事をする、です。また、cfinvokeを使用して元のページからcfcを呼び出す場合、ajax呼び出しを使用する代わりに、cflocationが機能します。だからこれはCF内から呼び出すのではなく、cfcをajaxで呼び出しているという事実とは関係があります。では、私はここで何が欠けていますか?

P.S.これはChrome、IE、およびFFで発生します。私はCF 9.0.1をホットフィックスと一緒に使っていますが、フレームワークはありません。ここではChromeの[ネットワーク]ペインからの出力のサブセットが参照するページについて、ヘッダには、です:

リクエストURLます:http://localhost/sitename/cfc/method.cfc

リクエスト方法:

をGET

ステータスコード:302

リクエストヘッダを表示一時的移動元

受け入れ:アプリケーション/ JSON、テキスト/ジャバスクリプト、/。 Q = 0.01

のAccept-文字セットを:ISO-8859-1、UTF-8、Q = 0.7、*; Q = 0.3

受け入れ-エンコーディング:gzipでは、収縮、SDCH

受け入れ言語:EN-US、EN; Q = 0.8

接続:キープアライブ

クッキー:CFID = 11801; CFTOKEN = 90037336; ?LASTVISIT = 1327852981759

ホスト:localhostの

リファラーます:http://localhost/sitename/index.cfmファイル= referringfile.cfm

のUser-Agent:Mozillaの/ 5.0(Windows NTの6.1; WOW64 )AppleWebKit/535.7 (GeckoのようなKHTML)Chrome/16.0.912.77 Safari/535。7

X-要求-WITH:getPartNumbers

フィルタ:{ "ページ" のXMLHttpRequest

クエリ文字列パラメータは、URLエンコードさ

方法ビュー1、 "sessionSQL": "1327834969791"、 "filterRows":[{ "FIELD_NAME": "PART_NUMBER"、 "オペランド": "等しい"、 "FIELD_VALUE": "11 06 01"}]}

_search:偽

ND:1327835014639

行:100

ページ:1

SIDX:PART_NUMBER

SORD:DESC

レスポンスヘッダのソースを表示

のContent-Type:テキスト/ html;文字セット= UTF-8

日:日、2012年1月29日は午前11時03分34秒GMT

場所:../ index.cfmにファイル= error.cfm

永続-AUTH:?本当

サーバー:マイクロソフト-IIS/7.5

のSet-Cookie:LASTVISIT = 1327853014657;期限が切れる=金、27 - 7月 - 2012年11時03分34秒 GMT;パス=/

転送 - エンコード:チュンケD

X-パワード・バイ:ASP.NET

そしてerror.cfmページ用:

リクエストURLます。http:?//localhost/sitename/index.cfmファイル= error.cfm

リクエスト方法:GET

ステータスコード:200 OK

リクエストヘッダービューソース

受諾:application/json、text/javascript、/; Q = 0.01

のAccept-文字セットを:ISO-8859-1、UTF-8、Q = 0.7、*; Q = 0.3

受け入れ-エンコーディング:gzipでは、収縮、SDCH

受け入れ言語:en-US、en; q = 0。8

承認:ネゴシエート blahblahblahblah

接続:キープアライブ

クッキー:CFID = 11801; CFTOKEN = 90037336; LASTVISIT = 1327716554490

ホスト:localhostの

リファラーます。http:?//localhost/sitename/index.cfmファイル=ファイル名/ filename.cfm &コンフィグ=ファイル名

のUser-Agent:Mozillaの/ 5.0 (Windows NTの6.1; WOW64)のAppleWebKit/535.7(KHTML、ヤモリなど)クローム/ 16.0.912.77サファリ/ 535.7

X-要求-付:XMLHttpRequestを

クエリ文字列パラメータは、URLが

をエンコード見ます

ファイル:error.cfm

レスポンスヘッダビューソース

のContent-Type:text/htmlの。文字セット= UTF-8日付:金、2012年1月27日午前21時09分14秒

GMT永続-AUTH:真のサーバー:マイクロソフト-IIS/7.5

のSet-Cookie:LASTVISIT = 1327716554533は; =水を満了し、 25月 - 2012午前21時09分14秒GMT;パス=/

転送エンコード:ASP.NET

+0

お願い:Google Chromeでは、メニュー(レンチ)に移動して、[ツール] - > [デベロッパーツール]を選択してください。ペインがページの下に開きます。 3番目のタブ(ネットワーク)をクリックし、CFC内でエラーをスローする場所でテストを再実行します。ネットワークアクティビティのスクリーンショットを作成し、質問に追加します。 –

+0

注目されていますが、どのバージョンとどのような種類のCFを明確にしてくださいか? Abode、Railo、Blue Dragonなど、他の人々がより多くの洞察力を持っている可能性があります。第二に、位置を結んでいるurl = "/ index.cfm?file = error.cfm"はうまくいきましたか? – NullyB

+0

リダイレクトonErrorを持つことは悪い考えです。あなたは無限ループのために自分自身を設定しています。 application.cfc/application.cfmやリダイレクト先のファイルに何か問題が生じた場合、サイクルは無期限に繰り返されます。代わりに、この運命を避けるためにエラーテンプレートを含めるべきです。このファイルにエラーが発生したときに生成されるべきHTMLのすべてが必要です。 –

答えて

0

Handling Remote API Errors With Application.cfc's OnError Event Method

は私が危険であるとだけで十分なのAjaxを知っていると思う:(

私は私を投げた何だと思うが、私はそのcflocationのを見ることができたということです実際にはエラーページにリダイレクトされていて、ネットワークペインで正しい応答を見ることができましたが、私が気づいていなかったのは、リモートから関数を呼び出していたので、ブラウザは実際には新しいウィンドウに移動しません応答はAjax呼び出し自体によって処理されるのを待って座っています。私はこのstuを理解します最終的には外に出る。

+0

これは問題の解決方法です。 AJAXはクライアント側であることを覚えておいてください。サーバー関数を呼び出しているにもかかわらず、クライアントに戻さない限り、サーバー側で何が起こるかは決して分かりません。これはどういう意味ですか?何かを出力したり、サーバー側でリダイレクトを実行したりすると、結果のクライアントに戻さない限り、サーバー側で何が起こるかは決してわかりません。 (あなたの質問に答えたことを忘れないでください) –

+0

はい、ありがとう、スティーブン...自分自身に繰り返し続ける必要があります:クライアント側、クライアント側、クライアント側.... – earachefl

0

編集:申し訳ありませんが、質問を読み違え

X-パワード・バイチャンク...

更新:cflocationを処理するテンプレートを含めると、application.cfc内でcflocationを実行すると、要求が発生する前に起こったことが許可されない可能性がありますか?

のApplication.cfc

component { 

    this.name = 'errorTest'; 

    public void function onError(required any Exception, required string EventName) { 

     include 'errorRedirect.cfm'; 
    } 
} 

index.cfmに(デモ用コードのエラーを有する)

<cfscript> 
a = form.nonExistentVariable; 
</cfscript> 

errorRedirect.cfm

<cflocation url="error.html"> 

error.html

<h1>Sorry, An Error has Occurred. </h1> 

test.cfc(CFCベースのエラーをデモするtest.cfc?方法=テストとテスト)

component { 

remote function test() { 

    a = form.DoesNotExist; 
} 
} 
+0

Ben、onError()メソッドの中でインクルードすることを意味しますか?私はすでにそれを試してみましたが、無駄です。 – earachefl

+0

ええ、私はCF9で私のために働いていた完全な実例を提供しましたが、今は他の人にテストするために下位バージョンのCFサーバーにアクセスすることはできません。 – BKK

+0

ベン、.cfmではなくApplication.cfcを使用しています。 – earachefl

0

を助けるかもしれませんCFを使用してHTML文書のHTML要素にバインドされていない限り、出力結果は表示されません。

AJAXリクエストを作成するときに、chromeを使用してエラーページのレスポンス本文(エンティティ)にコンテンツが表示されますか?

私はこれをBluedragonアプリケーションサーバーとしますか?私はここに私の答えを持っていると思います

関連する問題