ほげほげノート(2)
ちょいちょい改良(?)
http://konbu.s13.xrea.com/lib/ajax/tpage/page2.html
POSTデータのうけわたしをちゃんとするようにした。あとステータス表示部分追加。の後、なんか遊びで表示をメモ帳っぽくしてみた。
最初 XMLHttpRequest のPOSTデータが CGI.pm で受け取れなかった。「CGI.pm XMLHttpRequest」でぐぐったら、最初に出てきたページ(http://www.perlmonks.org/?node_id=588174)で、
xmlhttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
してみって書いてあったのでそうしたらちゃんと CGI.pm の param で、XMLHttpRequest のデータを受け取れた。「http://jsgt.org/ajax/ref/test/enctype/test1.htm」あたりも参照。
page2.html
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="page2.css" media="screen" /> <title> page </title> <script type="text/javascript"><!-- function HttpRequest(){ if(window.ActiveXObject){ try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { return null; } } } else if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else { return null; } } function loadpage(){ var page = "data2.txt"; http = new HttpRequest(); http.onreadystatechange = function(){ if(http.readyState == 4){ print("page", http.responseText); print_flush("status", "loaded."); } else { print("status", "Wait..."); } }; if(http){ http.open("GET", page, true); http.send(""); } } function savepage(page){ var txtdata = document.getElementById("page").value; http = new HttpRequest(); http.onreadystatechange = function(){ if(http.readyState == 4){ print_flush("status", "saved."); } else { print("status", "Wait..."); } }; if(http){ http.open("POST", "savepage2.cgi", true); http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); http.send("txtdata="+encodeURI(txtdata)); } } function print(id, str){ document.getElementById(id).innerHTML = str; } function print_flush(id, str){ document.getElementById(id).innerHTML = str; window.setTimeout('document.getElementById("'+id+'").innerHTML = ""', 2000); } function editevent(event, tid){ print("status", "text edited..."); clearTimeout(tid); return window.setTimeout("savepage()",2000); } // --> </script> </head> <body> <table class="note"> <tr class="note_title"> <td> <span class="title_title"> data2.txt - メモ帳 </span> <span class="title_button"> <input type="submit" value="_"> <input type="submit" value="□"> <input type="submit" value="×"> </span> </td> </tr> <tr class="note_menu"><td> <span class="menu_item">ファイル(<u>F</u>)</span> <span class="menu_item">編集(<u>E</u>)</span> <span class="menu_item">検索(<u>S</u>)</span> <span class="menu_item">表示(<u>V</u>)</span> </td></tr> <tr class="note_txt"><td> <textarea id="page" rows="15" cols="80" onkeypress="tid=editevent(event, tid);"></textarea> </td></tr> <tr class="note_status"><td><span id="status"></span></td></tr> </table> <script type="text/javascript"><!-- var tid; loadpage(); // --> </script> </body> </html>
デザインのため変更は含むけど、それ意外だと変更部分はJavascriptのみ。
savepage2.cgi
#!/usr/bin/perl -w use strict; use CGI; my $cgi = new CGI; print $cgi->header(-type=>'text/plain', -charset=>'utf-8'); my $txtdata = $cgi->param('txtdata'); open PAGE, ">data2.txt"; print PAGE $txtdata; close PAGE; print "saved.";