AJAXでWhat's Newを再度作ってみた.
前回のと違って今回はLoJAX (Low-technology AJAX)を使用して作ってみた.
LoJAX What's New
といっても,responseTextをdivタグのしたに流し込んでいるだけなのであれですが,MacIE5.xでは文字化けしちゃいます...
なんでだろう...
そもそもLoJAXを使用してデータが取れるのはいいんだけど,MacIE5ではresponseXMLとしてDOMが確立されてなくresponseTextにテキストが入っただけの状態で返ってくるのでDOMのメソッドを用いたデータの取得ができない...
となると正規表現とかで取得するとかでしょうか?
でも,そもそも文字化けしてるし...
あきらめるしかないかな…?
/**
* 読み込むことでBlogの最新記事とTOPICSを指定のオブジェクトへ表示させる
* <code>showTopics()</code>メソッドを提供する.
* {@link http://www.brothercake.com/site/resources/scripts/lojax/ lojax}を使用して
* Mac IE5以降でも動作するように実装したがなぜか文字化けを起こす...
*
* @link http://www.brothercake.com/site/resources/scripts/lojax/
* @usage <pre>
* <body onload="javascript:showTopics();">
* </pre>
* と,bodyタグのonloadイベントハンドラにて呼び出す.
* @author nao seto (seto@graffiti-web.org)
*/
/**
* windowオブジェクトへのエイリアス.
*
* @param window
*/
var target = this;
/**
* TOPICSのXMLへのパス.
*
* @param String
*/
var TOPICS_XML = 'topics.xml';
/**
* HTTP通信を行う XMLHttpRequestオブジェクト.
*/
var xmlHttpRequest;
/**
* TopicsのXMLを読み込み終わったときのイベントハンドラ.
*/
var _onLoadTopicsXML = function () {};
/**
* Topicsの表示が終わったときのイベントハンドラ.
*/
var _onInsertTopics = function () {};
/**
* Topicsをid="topics"要素の子要素としてXMLのまま表示させる.
*/
this.showNews = function() {
target.xmlHttpRequest = target._createXMLHttpRequest();
if (xmlHttpRequest == null)
return;
// 各イベントハンドラの割り当て
this._onLoadTopicsXML = this._insertTopics;
this._loadTopicsXML();
};
/**
* XMLHttpRequestオブジェクトを作成する.
*
* @return XMLHttpRequest
*/
this._createXMLHttpRequest = function() {
try {
return new XMLHttpRequest();
}
catch (e) {
try {
return new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e) {
return null;
}
}
return null;
};
/**
* TopicsのXMLを読み込みにいく.
*/
this._loadTopicsXML = function() {
target.xmlHttpRequest.onreadystatechange = function() {
if (target.xmlHttpRequest.readyState == 4 &&
/^(200|304)$/.test(target.xmlHttpRequest.status.toString())) {
target._onLoadTopicsXML(target.xmlHttpRequest.responseText);
}
};
target.xmlHttpRequest.open('GET', target.TOPICS_XML, true);
target.xmlHttpRequest.send(null);
};
/**
* HTMLに新着情報をXMLから書き込む.
*/
this._insertTopics = function(topics) {
var topicsDiv = document.getElementById('topics');
topicsDiv.appendChild(document.createTextNode(topics));
};
trackback for this entry URL:
http://blog.graffiti-web.org/mt/mt-tb.cgi/462