
ページを読み込み開始してから読み込み終了までの間に「処理中」と画面に表示したいと思い、http://oshiete.goo.ne.jp/qa/2753468.htmlを参考に下記のソースを書かさせていただいました。
【ソース】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<script type="text/javascript">
<!--
window.onload=function(){
document.getElementById("loading").style.display="none";
}
// -->
</script>
</head>
<body>
<div id="loading">ロード中</div>
<?php
// 本当はここでphpを用い、大量のデータベースアクセスを行っていて、処理に時間がかかっています。
flush();
sleep(2);
?>
本文です<br />
</body>
</html>
ただし、上記をブラウザで閲覧した所、最初に砂時計アイコンが表示され、その後しばらくして「本文です」と表示されましたが、「ロード中」という表示はされませんでした。
これをページ読み込み時に「ロード中」とブラウザ上に表示させ、しばらくたった後、「ロード中」を消した上で「本文です」と表示させたいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。
以上、宜しくお願いします。
No.1ベストアンサー
- 回答日時:
きっちりやるならやはりajaxで処理する方がよいでしょう
viewdata.php
<script>
function createXMLHttpRequest(){
if( window.XMLHttpRequest ){
return new XMLHttpRequest();
}else if( window.ActiveXObject ){
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
}
return null;
}
function getData( serverURL, objID ){
var ajax = createXMLHttpRequest();
ajax.open( "GET", serverURL );
ajax.onreadystatechange=function(){
if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){
if(objID!=""){
var obj = document.getElementById( objID );
obj.innerHTML = ajax.responseText;
}
}
}
ajax.send( '' );
}
window.onload=function(){
document.getElementById("hoge").innerHTML="loading ..."
getData("loaddata.php","hoge");
}
</script>
<div id="hoge"></div>
//loaddata.php
<?
sleep(3);
?>
success!
ご回答ありがとうございます。
ご教示いただいたソースで意図した動作となりました。
このたびはどうもありがとうございました。
以上、よろしくお願いします。
No.2
- 回答日時:
確認したところSafariがダメ、その他メジャーなブラウザはOKでしたので、バッファリングの問題かと。
サーバ側で出力したからといってすぐに表示されるわけではなく、Apacheやブラウザはある程度のデータ量をまとめて送信/表示します。このためデータ量が少ない場合、意図したとおりに表示されないことがあります。
試しに div「ロード中」の前に十分な文字列を加えてみて下さい。
(ちなみにSafariでは 350byteほど 足してやると動作しました)
蛇足ながら、確かブラウザにより、きちんと table タグが閉じられるまではテーブル内のコンテンツは一切表示されないということもありましたので、table内に配置している場合は要注意です。
ご回答ありがとうございます。
ご指摘のように十分な文字を追加した所、意図した動作となりました。
このたびはどうもありがとうございました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
スマホ上で、左右スワイプで次...
-
jsで質問です。 formをsubmitし...
-
Outlookのアカウントがあるとメ...
-
オブジェクト配列の各メンバを...
-
初心者です。gulpでコンパイル...
-
jsで、配列内の文章を改行する...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[jQuery UI] sortableを使いaja...
-
javascriptでAPIをcallしたい
-
.txtファイルの読み込み
-
こちら分かりますでしょうか?
-
変数にドットをいれることはか...
-
読み込み開始から読み込み終了...
-
jQueryでloadしたphpをapendTo...
-
ajaxでPOSTする変数の変数名を...
-
Win11 へのRufus と レジストリ...
-
階層別の組織図の自動作成について
-
JavaScriptでtabindexの変更っ...
-
Javascriptを使ってQRコード読...
-
同一ページ移動時ハンバーガー...
-
JavascriptからPHPへのAjax通信...
-
how's whether today in yufuin?
-
パソコンで動くjavascriptがス...
-
カンマ区切りのデータを配列に...
-
SQLのmaxで求めた値を変数に代...
-
スライドを最後の画像で止めたい
-
jQuery を外部ファイルから呼び...
おすすめ情報