Content-Length: 59995 | pFad | http://q.hatena.ne.jp/1106704868
このサイトで結果が徐々に表示されているのですが、どのような技術を使っているのでしょうか?
スクリプトの拡張子はphpとなっていますが、PHPの関数だけで可能でしょうか?
技術というような物ではなく、結果をgoogleやyahooに毎回問い合わせに行ってますので、時間がかかり時間差であのような表示になっているのだと思います。
故意的に行おうとするならば自サイト内でも良いですので、回答データーをURLリンクを張って結果を返すようにして、その結果を返すのに少しゆっくりになる制御をかければ可能かと思います。
初期設定では「チェック中」と表示されている部分をJavascriptによって書き換えています。ですのでJavascriptを無効にしてあると、結果が徐々に表示されることはありません。
PHPの関数だけでは難しいのではないかと思います。
まず普通にTABLEタグで「チェック中」という風に書かれた表を出力し、
結果が分かった物から順番にJavaScriptの
ID名.innerHTML=’ほにゃらら’
というのを出力して「チェック中」を実際の件数に置き換えています。
tableタグを出力した後にその続きとしてscriptを吐いてるだけですから普通に出力するだけでいいと思いますよ。
一気に全てを出力しなければならないわけではなく、結果が分かったらその部分を出力していくだけです。
ブラウザにしてみれば「回線速度遅くて受信に時間が掛かっている」のと同じ状況ですから。
テストしてみたら、希望の状態が再現できました。
innerHTMLの部分が読み込まれる度に「チェック中」のところが値と入れ替わっているのですね!
参考になりました。ありがとうございました。
バックエンドのスクリプトの処理に任せなくても、該当ページ自体がPHPファイルなので、この中で処理が行われていそうな気がします。
該当するJavaScript部分はページ下部にあります。
出力バッファを切るかコントロールするかすれば、
出力内容が順次表示されますので、JavaScript部
分は最後の出力になります(つまりブラウザに解
釈されるのが遅れる)。
ブラウザに解釈されるのが遅れれば、その分その
場所に書いてある「innerHTMLを用いたドキュメン
トの書き換え」という処理も遅れてくることにな
るかと思います。
ですので、結果、順次表示されるということだと思います。
私もソースを調べてみました。
おっしゃる通りですね。
回答していただいた皆様、ありがとうございました。
Fetched URL: http://q.hatena.ne.jp/1106704868
Alternative Proxies:
「実際の件数」はバックエンドで動いているスクリプト(仮にA.cgiとする)の結果の値だと思うのですが、A.cgiの処理が終了したことをJavaScriptに知らせる方法が良く分かりません。ご存知でしょうか?