XMLHttpRequest サンプルコード

XMLHttpRequest を処理する簡易 Wrapper サンプルコード。

var myextension = {
	// get html contents and do something
	httpGet: function(url, callback) {
		var req = new XMLHttpRequest();
		req.onreadystatechange = this.bindFunction(this, function(e) {
			if (req.readyState == 4) {
				if (req.status == 200) {
					if (typeof callback == "function") {
						callback(req.responseText, req.status, req);
					}
				}
				else {
					var message = "HTTP Request Failed! - url: " + url;
					if (this.debug && typeof this.debug.warn == "function") {
						this.debug.warn(message);
					}
					else if (Firebug && Firebug.Console && typeof Firebug.Console.log == "function") {
						Firebug.Console.log(message);
					}
					else {
						window.alert(message);
					}
				}
			}
		});
		req.open("GET", url, true);
		req.send(null);
		return req;
	},
	// workaround until we can use ECMA 5th bind method
	// we can this function to specify 'this' for callback functions
	bindFunction: function(thisobj, func) {
		return function() func.apply(thisobj, arguments);
	}
}
myextension.httpGet("", function(data, status, req) {
	alert(data);
});

このコードは 拡張機能デバッグイ ンターフェイスや Firebug などと組み合わせて使えるようにしたり、コールバック関数で this が維持されない問題についての対応を含めたサンプルですが、拡張機能固有の話ではないので必要な機能に応じて適当に Web サイト用のコードを好きなように使えば OK です。