PDA

View Full Version : サーバーサイドとの通信について



ak_ext
28 May 2009, 3:32 AM
サーバサイドjavaにajax通信して検索結果などを取得しているのですが、
例えば検索時にセッションが切れていると、
検索ボタンを押下した後、通信には行くのですが結果を取得できず画面が
検索中のまま止まってしまいます。

このような時はloadexceptionのハンドラーでキャッチして処理する物だと
思っていたのですが、イベントがキャッチできず・・・
フレームワークの機構上サーバー側で上記エラーをキャッチできません。
このような場合他のイベントハンドラーでキャッチできるのでしょうか。

integra
28 May 2009, 4:42 PM
セッションが切れている際のレスポンスデータの確認をしてみてください。(FireBugなどで。)
適切なHTTPステータスコードが返っていれば、loadexceptionにたどり着くはずなので。

ak_ext
2 Jun 2009, 11:03 PM
が帰ってきてないです。
フレームワークの仕様上ログイン画面のJSPが
通信データとして帰ってきてしまいます。

それでloadExceptionでキャッチできず、
javascriptのエラーが出てしまうみたいです。

integra
3 Jun 2009, 12:30 AM
が帰ってきてないです。
フレームワークの仕様上ログイン画面のJSPが
通信データとして帰ってきてしまいます。

それでloadExceptionでキャッチできず、
javascriptのエラーが出てしまうみたいです。

であれば、特定の場合(今回のloadなど)は
ステータスコードをきちんと設定したレスポンスを返すようにしてみてはいかがでしょうか?
(なんかExtJSから外れた話題ですが。)

ak_ext
3 Jun 2009, 5:09 PM
サーバーサイドでレスポンスを設定する事は,
フレームワークの機構上できないみたいです。
responseTextが設定されておらず、
システムエラー1072896658
が画面側で発生しています。
この場合、
loadでもloadexceptionにもかからない
画面側でこのシステムエラーを出さないように
するのは難しそうですね。

mashiki
5 Jun 2009, 5:55 PM
> それでloadExceptionでキャッチできず、
> javascriptのエラーが出てしまうみたいです。

Javascriptのエラーはどのようなものでしょう?

evalでSyntaxErrorがでてるのなら、

 Ext.util.JSON.decode(res.responseText)

を呼ぶ前に、
res.responseTextをチェックして、
たとえばオブジェクトが帰ってくることを期待しているなら、
.charAt(0) が「{」となっているかを確認すれば制御可能ですよ。

Mari
7 Jun 2009, 11:57 PM
以下のように、decode時にtry catchでくくると、期待したJSON形式以外のresponseが帰ってきた場合にcatchすることができますよ:)

Ext.Ajax.Requset({
   url:'XXXXXX' (http://extjs.com/forum/'XXXXXX'),
   method 'POST.',
   success:function(response){
           try{
var str = Ext.util.JSON.decode(response.responseText);
           }catch(e){
エラー時の処理
}
},
 failure:function(){
エラー時の処理
}
});

mashiki
8 Jun 2009, 5:43 AM
ああ、このやり方いいですね。
参考になります。=D>

ak_ext
18 Jun 2009, 2:13 AM
エラー時の処理ありがとうございます。
大変参考になっています。
ajax通信をしてると、時々responseTextで
msxml3.dll: システム エラー: -1072896658
のエラーが返ってきます。

ログを見ても、原因不明のエラーとあって
原因がよくわかりません。
発生理由をご存知の方がいたらご教授お願いします。

ak_ext
19 Jun 2009, 12:07 AM
XMLHttpRequestオブジェクト (http://d.hatena.ne.jp/keyword/%a5%aa%a5%d6%a5%b8%a5%a7%a5%af%a5%c8)のresponseTextを取得しようとすると、“システムエラー-1072896658”が発生する。Firefoxでは発生しない。サーバ (http://d.hatena.ne.jp/keyword/%a5%b5%a1%bc%a5%d0)はJava (http://d.hatena.ne.jp/keyword/Java)。
JSP (http://d.hatena.ne.jp/keyword/JSP)ファイルのヘッダにてcharsetとして“Windows (http://d.hatena.ne.jp/keyword/Windows)-31J”を指定していると発生するので“Shift_JIS (http://d.hatena.ne.jp/keyword/Shift_JIS)”を指定する。
とあるのですが、Windows (http://d.hatena.ne.jp/keyword/Windows)-31Jを使いたい場合は不可避なんですかね・・

kiyoto01
23 Jun 2009, 1:25 AM
Ext.data.Store から load を呼ぶようにすると、パースエラーも loadexception にまわるような気がしますね。
Ext.Ajax だと、ほんとに通信の管理しかしてくれないので、そのへんのエラー処理が必要になると思います。
まあ、Store は親切だけど、その分調整が難しかったりして、それはそれで面倒なのですが。。。