サーバサイドでエラーが起きたとき、Aptana Jaxer がどのように振る舞うか調べてみましたので、その結果をお伝えします。Jaxer でサーバサイドのコードを実行するタイミングには runat="server" と runat="server-proxy" がありますが、今回は runat="server" を対象とします。今回は runat="server-proxy" でエラーが起きたとき、Aptana Jaxer がどのように振る舞うか調べてみました。
runat="server" と同じように runat="server-proxy" で、サーバサイドで例外をスローするコードを用意しました。
<script type="text/javascript" runat="server-proxy">
//<![CDATA[
function foo1(value) {
throw 'ERROR!;'
}
//]]>
</script>
そして、次のとおり、クライアントサイドからサーバサイドを実行してみたところ、次のような Alert が表示されました。
<script type="text/javascript">
//<![CDATA[
foo1('bar1');
//]]>
</script>
クライアントサイドからサーバサイドを非同期で実行しても、同じように Alert が表示されました。
<script type="text/javascript">
//<![CDATA[
foo1Async(function(v) {}, 'bar1');
//]]>
</script>
Alert のメッセージは、エラーの具体的な内容を表すので、そのまま見せると不都合なことがあります。そのときは、Config.DISPLAY_ERRORS = false; とすることで、メッセージを固定にして、エラーの内容を伏せることができます。その固定のメッセージは Config.CALLBACK_ERROR_MESSAGE もしくは Config.CALLBACK_FATAL_ERROR_MESSAGE で指定できます。
Alert を表示しないで、ソースコードでエラーを判別する選択もできます。そのときは、Config.ALERT_CALLBACK_ERRORS = false; とします。
クライアントサイドからサーバサイドを同期で実行するときは、例外をキャッチすることで、サーバサイドのエラーをハンドリングできます。
<script type="text/javascript">
//<![CDATA[
try {
foo1('bar1');
} catch (e) {
console.log(e);
}
//]]>
</script>
クライアントサイドからサーバサイドを非同期で実行するときは、エラーのコールバック関数を指定することで、サーバサイドのエラーをハンドリングできます。成功とエラーのコールバック関数を配列で指定します。
<script type="text/javascript">
//<![CDATA[
foo1Async([
function(v) { console.log(v); }, // 成功
function(e) { console.log(e); } // エラー
], 'bar1');
//]]>
</script>
また、成功と失敗のコールバック関数は、オブジェクトとしても指定できます。
<script type="text/javascript">
//<![CDATA[
foo1Async({
callback: function(v) { console.log(v); }, // 成功
errorHandler: function(e) { console.log(e); } // エラー
}, 'bar1');
//]]>
</script>
0 件のコメント:
コメントを投稿