- PR -

「実行中・・・」や「検索中・・・」を表示させるには

投稿者投稿内容
黒獅子
会議室デビュー日: 2002/10/16
投稿数: 17
投稿日時: 2004-03-18 13:23
こんにちは。
簡単に記述してみると、こんな感じです。

条件入力画面
<BODY>
<FORM ACTION="taiki.htm" METHOD="post">
検索条件:<INPUT TYPE="text" NAME="条件">
<INPUT TYPE="submit" VALUE="検索開始">
</FORM>
</BODY>

待機画面(taiki.htm...本当はCGIなど)
<BODY onLoad="JavaScript:document.dummy.submit()">
検索中です。
<FORM NAME="dummy" ACTION="kekka.htm" METHOD="post">
<INPUT TYPE="hidden" NAME="条件" VALUE="条件入力画面から受け取った値">
</FORM>
</BODY>

結果画面(kekka.htm...本当はCGIなど)
<BODY>
該当するデータはありませんでした。
</BODY>

待機画面のhidden項目の値は、サーバーサイドで設定します。
つまりHTMLとして吐き出されたときは、固定値が設定されていることに
なります。

(実は.NETでの開発経験は無いのですが、的外れなことを言っているのでしょうか)

[ メッセージ編集済み 編集者: 黒獅子 編集日時 2004-03-18 13:27 ]
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-03-18 16:42
ありがとうございます。

方法は同じです。
また、今回の場合ですとクライアントで値を入れようと、
サーバで入れようと同じ気がするのですが、どうなのでしょうか?

あと、クライアントまでは値が入ったことを確認できたのですが、
検索結果画面に遷移すると値はなくなっていました。
(Request["キー"]で確認)

現在の対処法として、検索入力画面のボタンクリックイベント(クライアント側のJavaScript)にてポップアップを表示させています。
コード:
function showPopup()
{
 obj = window.createPopup();
 popOBJ = obj.document.body;
 popOBJ.style.border = "solid blue 2px";
 popOBJ.innerHTML = "検索中";
 obj.show(100,100,100,24,document.body);
}


しかし、他の場所をクリックすると消えてしまうので、
どうにかこれまで述べた方法でやりたいのです。
宜しくお願い致します。
黒獅子
会議室デビュー日: 2002/10/16
投稿数: 17
投稿日時: 2004-03-22 13:48
こんにちは。
私が提示した方法は、たぶん開発言語やWebサーバーに依存しない方法
だろうと思っているのですが、他に試された方はおられないでしょうか。
(すべての開発言語やWebサーバー等を知っている訳ではないので
間違っているかもしれません。)
可能であれば、もう少し原因を探ってみていただきたいですが、
とりあえず、別の方法も提示してみます。

<HEAD>
<SCRIPT LANGUAGE="JavaScript"><!--
function goSearch(){
var obj = document.getElementById('DSP1');
obj.style.display = 'none';
obj = document.getElementById('DSP2');
obj.style.display = 'block';
document.joken.submit();
}
//--></SCRIPT>
</HEAD>
<BODY>
<DIV ID="DSP1" STYLE="display:block">
<FORM NAME="joken" ACTION="kekka.htm"><!-- 本当はCGI等を呼び出す -->
<INPUT TYPE="text" NAME="条件">
<INPUT TYPE="button" VALUE="検索開始" onClick="goSearch()">
</FORM>
</DIV>
<DIV ID="DSP2" STYLE="display:none">
検索中です。
</DIV>
</BODY>
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-03-26 15:39
少し脱線しますが、ViewStateは無効です。壊れている可能性があります。
と表示される問題が解決しません。
やっている内容は、

フレーム(上)検査条件入力画面(下)検索結果
(初回読込み時は無効なボタンのみ表示されています)
検索条件入力画面(post)→待機画面(post)→検索結果

です。
検索条件入力画面→待機画面は正常に値を渡せており、問題ありません。
(待機画面クライアントにも値は来ています)
しかし、待機画面で、エラーが出ます。
コード:
<body>
<form method="post" runat="server" id="test">
 <input id="id_hide" type="hidden" runat="server">
</form>
<script language="javscript">
<!--
 document.test.target = "search";
 document.test.action = "kekka.aspx";
 document.test.submit();
-->
</script>
</body>


スクリプト内は通っているようですが、
この後、上記のエラーが表示されてしまいます。

http://support.microsoft.com/default.aspx?scid=kb;ja;323744
と関連があるのでしょうか?
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2004-03-26 18:19
ASPスクリプトうろおぼえですが。

hoge.aspx として、

<%
key = getParameter('key')
if 結果がまだ(key) then ref = "<meta http-equiv='Refresh' content='5;hoge.aspx?key="+key+"'>"
else ref = "<meta http-equiv='Refresh' content='0;"+結果(key)+".pdf'>"
%>
<html><head>
<%= ref %>
</head>
<body>お待ちください</body></html>
黒獅子
会議室デビュー日: 2002/10/16
投稿数: 17
投稿日時: 2004-03-26 23:40
こんばんは。
ASPでの開発経験が無いので、runat="Server"という呪文については
知りませんが、クライアントサイドのJavaScriptの部分は、"id"を使用
するのなら、次のように記述すれば良いのではないでしょうか。

<body>
<form method="post" runat="server" id="test">
<input id="id_hide" type="hidden" runat="server">
</form>
<script language="javascript">
<!--
var obj = document.getElementById('test');
obj.target = "search";
obj.action = "kekka.aspx";
obj.submit();
-->
</script>
</body>

ちなみに私は、Web系の開発言語としては、Java(JSP/Servlet),PHP,perl,
PL/SQL(OracleApplicationServer)くらいしか経験がありません。
runat="Server"のご利益を知らないので、値の受け渡しができるのかは
私には分かりません。
私が提示した内容と同じことをしようとしていることは想像できますが、
私の知識の及ぶ範囲で考えると同じには見えないです。
(開発言語、Webサーバーに依存するように見えるのですが...。)
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-03-30 11:52
お返事ありがとうございます。
引用:

黒獅子さんの書き込み (2004-03-26 23:40) より:
私が提示した内容と同じことをしようとしていることは想像できますが、
私の知識の及ぶ範囲で考えると同じには見えないです。
(開発言語、Webサーバーに依存するように見えるのですが...。)


の同じには見えないとは、どこが違うのでしょうか?//←誤字編集

また、何度も書きますが、サーバ上で値を渡し、クライアントまでデータは来ているようです。
しかし、submit後に既記のエラーが出ています。
ASP.NET開発者で同じ現象に遭遇された方はいらっしゃいませんでしょうか?

[ メッセージ編集済み 編集者: BB.NK 編集日時 2004-03-30 11:53 ]
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2004-03-30 17:16
コード:
--------------------------------------------------------------------------------
 
<body>
<form method="post" runat="server" id="test">
 <input id="id_hide" type="hidden" runat="server">
</form>
<script language="javscript">
<!--
 document.test.target = "search";
 document.test.action = "kekka.aspx";
 document.test.submit();
-->
</script>
</body>



このコードって kekka.aspx 上に記述されているのでしょうか。
多分、フレームを使用されていることから、フレーム上の別ウィンドウに、
別のページを呼び出しているのではないでしょうか。

ASP.NETのVIEWSTATEは、VIEWSTATEを作成したページに返さずに、別ページで
作成されたVIEWSTATE値をPOSTで返すと、仰るようなVIEWSTATEが壊れている との
エラーメッセージが出ます。

理由は、 VIEWSTATE値には、ページのある時点のコントロールの情報を詰め込んで、
クライアントに送り、後ほどPOSTによって返された際に、クライアントからの
VIEWSTATE値からコントロールを復元させることで、サーバーリソースの消費を減らすためにある
テクニックだからです。

従って別ページに送ると、存在するコントロールとは一致しない内容が記述されている
ことになります。 そのことをASP.NETのフレームワークが検出して、エラーが
出ているんです。

現在のコードを生かす形で実現するのであれば、

document.test.action = "kekka.aspx";
の行は、カットして、元ページへ戻すようにして、
Loadイベントで、POSTBACKされた場合に id_hide値を検査して、
Server.Transferメソッドで、サーバ側で、kekka.aspxを実行させる
とうまくいくとおもいます。



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