2

ajax 経由で呼び出される ColdFusion テンプレートがあります。テンプレートには、次のような秒のタイムアウトがあります。

<cfsetting showdebugoutput="true" requesttimeout="2" />

しかし、タイムアウトが発生した場合、エラー メッセージは返されません。タイムアウトをキャッチして Ajax 経由で適切に応答する方法はありますか?

4

3 に答える 3

3

エラーメッセージが返ってこない

何か戻ってきますか?応答には、ColdFusionが生成するテキストが含まれている必要があります。Chromeを使用したことがありますか、バグを起動したり、応答を確認して使用できないものが戻ってきたかどうかを確認できるWebツールを備えたブラウザを使用したことがありますか?クライアント側の失敗を抑制している可能性のある成功/失敗のコールバック関数を備えたものを使用していますか?以下の提案が役に立たない場合は、JSを投稿し、質問にタグを付け直します。

そうは言っても、リクエストのタイムアウトが切れた後に何かをするときはいつでも、タイムアウトを延長したいと思うでしょう。onErrorとtry/catchには、エラーに対応するためのタイムアウト後のMSが数個しかないため、メッセージの送信やエラーのログ記録も失敗します。電子メールを送信したりファイルに書き込んだりしようとした場合、CFエラーメッセージは、cfmailまたはcffileアクションが(技術的に)タイムアウトしたことを示しますが、それが最初のエラーの原因ではありません。

タイムアウトがすでにわかっている場合は、requestTimeoutを少し大きいものにリセットするだけです。

<cfsetting requesttimeout="2">
<cftry>
    <!--- some stuff that takes more than 2 seconds --->
    <cfcatch type = "any">
        <cfsetting requesttimeout="5">
        <!--- logging / error handling for timeout --->
        <!--- NOTE!! This does not add 5 seconds, it adds 3.  --->
        <!--- The value of requestTimeout is the total time of the timeout. --->
    </cfcatch>
</cftry>

または、現在のタイムアウト値がわからない場合は、時間を追加できます。

<cftry>
    <!--- some stuff that takes more than your timeout --->
    <cfcatch type = "any">
        <!--- You must first create your object to hold the requestMonitor. --->
        <cfset monitor = createObject("java", "coldfusion.runtime.RequestMonitor") />
        <!--- Then you need to reset your request timeout --->
        <!--- add 5 seconds to the timeout --->
        <cfsetting requesttimeout=monitor.getRequestTimeout()+5>
        <!--- logging / error handling for timeout --->
    </cfcatch>
</cftry>

try / catchブロックでもこれを行う必要はありません。application.cfcで定義されている場合は、onErrorイベントハンドラーにこれを含めることができます。

于 2012-11-28T15:08:03.673 に答える
0

AJAX によって呼び出される ColdFusion テンプレート全体をcftryブロックでラップする必要があります。そうすれば、ColdFusion の例外が発生した場合に、それを処理して、必要なメッセージをクライアントに返すことができます。

<cftry>
    <!--- all of your ColdFusion template code here --->
    <cfcatch type="Any">
    <!--- return whatever you want here --->
        <div>An error has occurred.</div>
        <!--- remember that you have the cfcatch structure available to you --->
        <!--- which contains the specifics of the error that was thrown     --->
    </cfcatch>
</cftry>

AJAX 呼び出しが行われているクライアント側では、発生する可能性のある http 接続関連のエラー (接続の失敗、タイムアウトなど) を処理できます。AJAX 呼び出しにはエラー メソッドなどがあります。これには jQuery を使用することを強くお勧めします。 jQuery AJAX API

あなたはあなたの投稿で特定の情報を提供しませんでした。問題が発生した場合は、実際に問題を抱えているコードを共有することが常に役に立ちます。次に、StackOverflow のユーザーがさらに役に立ちます。

于 2012-11-28T13:43:14.350 に答える
0

ColdFusion テンプレートが、Application.cfc ファイルがあるフォルダーにある場合、onError 関数を使用して何かを実行できる場合があります。

于 2012-11-28T12:42:35.783 に答える