- 2006-01-28 (土) 18:29
- 未分類
引越しのために掃除中・・・全然終わらん。終わらないこともないけど、いざ捨てようと思うともったいなくてたまらない…
- スキャナ
- でかい。1980円で買ったNEC製捨てたほうがいいやもしれん。
- 歴代CPU
- 裏がとげとげしている。一応残っている中で一番古かったのはMMX Pentium。文鎮代わりに使えるか・・・?
- 歴代ビデオカード
- ソフマップで買ってくれるだろうか・・・Millenium G400系が多いかも。
あと、ゲームの箱とか冴木忍の本とか(カイルロッドあたりは捨てがたい・・・もうだいぶ読んでないけど)、とにかく本が多くて、文庫本は全部捨てようと画策中。
で、ぷち掲示板を*ascx化してみました。昨日よりはだいぶましなコードになっていると思うけど・・・どうだろ。ログはもう簡単な形でいいかなぁとか思ってみたり。無駄にsleep()しているのは、ローディングイメージ
がクルクルしているのをみたいから!
AjaxMemo.ascx
これが部品になります。
<%@ Control Language="C#" ClassName="AjaxMemo" %>
<script language="javascript" type="text/javascript" src="Ajax.js"></script>
<script language="javascript" type="text/javascript">
<!--
function preload() {
var img01 = new Image();
img01.src = "img/loading.gif";
}
function readFile()
{
request = createXMLHttpRequest();
if (request)
{
time = (new Date()).getTime();
request.onreadystatechange = load;
request.open("GET", "edit.aspx?" + time, true);
request.send(null);
}
}
function saveFile(author, text)
{
request = createXMLHttpRequest();
if (request)
{
command = "edit.aspx?"
+ "author=" + encodeURI(author) + "&"
+ "text=" + encodeURI(text);
request.onreadystatechange = load;
request.open("GET", command, true);
request.send(null)
}
document.form1.Text2.value = "";
}
function load()
{
if (request.readyState == 4)
{
switch(request.status)
{
case 200:
text = request.responseText;
break;
case 403:
text = "access denied.";
break;
case 404:
text = "file not faund.";
break;
}
}
else
{
text = "<img src=\"img/loading.gif\" "
+ "style=\"vertical-align: middle;\" /> loading..."
}
$("log").innerHTML = text;
}
function Button1_onclick()
{
saveFile($("Text1").value, $("Text2").value);
}
function Button2_onclick()
{
readFile();
}
// --></script>
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
string script = "<script language='JavaScript'>preload(); readFile()<"
+ "/script>";
Page.RegisterStartupScript("startup", script);
}
</script>
<div class="entry">
<h2 class="entry-header">Memo</h2>
<div class="entry-content">
<p>ぷち伝言板。エッチな||差別的な落書きはダメ、絶対。Powered by Ajax + ASP.net</p>
<input id="Text1" type="text" style="width: 100px;" />
<input id="Text2" type="text" style="width: 280px;" />
<input id="Button1" type="button" value="Write"
language="javascript" onclick="Button1_onclick()" />
<input id="Button2" type="button" value="Reload"
language="javascript" onclick="Button2_onclick()" />
<div id="log" style="border: solid 1px gray; padding: 1em; margin-top: 1em;">
</div>
</div>
</div>
edit.aspx
書き換えCGI部分
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
<script runat="server">
/* Output line count */
private const int count = 10;
private const string password = "******";
private Color color = Color.Red;
protected void Page_Load(object sender, System.EventArgs e)
{
string path = Server.MapPath("memo.txt");
string log = string.Empty;
using (StreamReader reader = new StreamReader(path))
{
log = reader.ReadToEnd();
}
string text = Request["text"];
string author = Request["author"];
try
{
text = HttpUtility.UrlDecode(text);
text = text.Replace("&", "&");
text = text.Replace("<", "<");
text = text.Replace(">", ">");
author = HttpUtility.UrlDecode(author);
author = author.Replace("&", "&");
author = author.Replace("<", "<");
author = author.Replace(">", ">");
}
catch
{
/* Bad request - output only - */
goto output;
}
if (author == password)
author = "<span style=\"color: "
+ color.Name
+ "\"; >Gatz (admin)</span>";
/* insert "author: text [datetime]" to log */
log = string.Format("{0}: {1} [ {2} ]\r\n{3}",
author, text,
DateTime.Now.ToString("G"), log);
using (StreamWriter writer = new StreamWriter(path))
{
writer.Write(log);
}
output: /* CGI Output */
System.Threading.Thread.Sleep(1000);
string[] logs = log.Replace("\r\n", "\n").Split('\n');
log = string.Empty;
for (int i = 0; i < count && i < logs.Length; i++)
log += logs[i] + "<br />";
Response.Write(log);
}
</script>
ローカルではうまくいくんですけど、サーバーにアップするとタグ入りのコメントを入れるとずーっとローディング状態に。多分どこかにASP.net2.0依存の部分があるんでしょう・・・
ajax.js
外部ファイルに書いたJavaScript部分。おいおい育てていきましょう
function $(tagId)
{
return document.getElementById(tagId);
}
function createXMLHttpRequest()
{
try
{
return new ActiveXObject ("Microsoft.XMLHTTP");
}
catch (e)
{
try {
return new XMLHttpRequest();
}
catch (e)
{
return null;
}
}
return null;
}
拙いですけど―不審な点があればご意見いただけるとうれしいかなぁ。それより先に攻撃されそうだけどorz(誰も狙わないか^^;)
- Newer: お遊び。
- Older: Community Server 2.0 Beta3 が公開されました。

