- PR -

Ajax:スクリプト読込中のエラー

1
投稿者投稿内容
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-07 15:40
お世話になります。

Ajaxを使用しWebアプリケーションを開発しています。
VS2008、VBです。

UpdatePanel上に複数のコントロール(DropDownList、RadioButtonList、TextBox等)
を配置し、それぞれのイベントをTriggerに登録しているのですが
DropDownListで項目を選択した直後にRadioButtonListをチェックする等
立て続けに処理を行った場合、以下のエラーが発生してしまいます。

------------------------------------------------------------------
Microsoft JScript 実行時エラー: Sys.InvalidOperationException: ScriptLoader
がスクリプトを既に読み込み中の場合、ScriptLoader.loadScripts を呼び出すことはできません。
------------------------------------------------------------------

やってみたこと
1.UpdateProgressで、操作されたくないコントロールを覆うサイズ&z-indexのdivを表示させる
2.PageRequestManagerのbeginRequest、initializeRequesで操作されたくないコントロールの乗ったパネルをdisableにし、EndRequest時に元に戻す。

自分なりに上記の対策を施してみましたが、両方とも、UpdateProgressのdivが非表示になった直後、パネルがenabledになった直後に
操作を行うと、同様のエラーが発生してしまいます。
1.2の起動するタイミングより、エラーの捕まえられるタイミングの方が早いのでしょうか…


どなたかこのエラーの対策・回避方法等おわかりになるようでしたらご教示下さい。
よろしくお願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-09-08 07:25
下記サイトが参考になりませんか。

http://geekswithblogs.net/rashid/archive/2007/08/08/Asp.net-Ajax-UpdatePanel-Simultaneous-Update---A-Remedy.aspx

それから、Ajaxをテストするときは

Firefox + FireBugを利用したらどうでしょうか。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-08 09:56
回答ありがとうございます。煮詰まっていたので助かります。
ご紹介頂いたサイト、これから調べてまた結果をご報告します。

>Firefox + FireBug
業務アプリでブラウザ固定なものでほぼIEでのみ開発していました。
FireBug便利そうですね。試してみます。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-10 17:00
ご報告遅くなり申し訳ありません。

非同期ポストバック中にされたリクエストをいったんキューに入れて
後で_doPostBackする、というのは目から鱗でした。
シンプルな画面構成の場合、まさに希望通りの動きです。

ただ、マスタページを使用していたり、ユーザコントロールを使用している場合
立て続けに行った処理の2つめ以降が動作しません。(リンク先のコメントにもありますね)
js側で_doPostBackは行われているのですが、VB側のイベントにたどりつきません…。

原因や、気をつけてみるべき点など、おわかりになる方がいましたらご助言願います。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-09-11 02:10
__COMMAND_TARGET を保存しておくとか。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-11 10:37
すみません。
__COMMAND_TARGETというのはどこに保持されているものでしょうか。
__EVENTTARGETではないんですよね…
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-24 15:56
現状報告です。

マスタページ使用時に動作させる方法が思いつきません。
お手上げです。

応急処置的にget_isInAsyncPostBack()時にargs.set_cancel(true);で
後に発生したポストバックをキャンセルしていますが、
ボタンの二重クリックではないので、処理をキャンセルしっぱなしというわけにはいきません。

マスタページ未使用の場合はうまくいくので
該当の部分を別ページで作成し、iframeで表示し
親ページから制御できないか試してみようと考えています。
正直なところフレームは使いたくなかったのですが…。

引き続き、マスタページ使用時の処理についてご助言お待ちしています…。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2008-09-24 19:33
お手上げと書き込んだすぐ後であれなのですが、
マスタページ使用時に動作させる方法がわかりましたのでご報告します。
http://forums.asp.net/t/1152540.aspx

endRequest時の

_prm._doPostBack(_element.id, _eventArg);

↑これを、これ↓に変更することで動作しました。

if(_element.name != null)
 _prm._doPostBack(_element.name, _eventArg);
else
 _prm._doPostBack(_element.id.replace(/_/g,"$"), _eventArg);


確かにnameとidでは値が違うのですが、
なぜ最初のポストバックでうまくいって、
再処理時に失敗するのかわかりません…。

もう少し検証を続けてみますが、とりあえずは解決とさせて頂きます。
1

スキルアップ/キャリアアップ(JOB@IT)