#author("2016-05-29T00:33:34+09:00","","")
*URLエンコードをしないでGET/POST 送信するテクニック [#w4211b23]

LoadVarsオブジェクトのsend/sendAndLoadメソッドでは、~
2バイト文字が強制的にURLエンコードされてしまいます。

しかし、送信メソッド内部で更に呼び出されるURLエンコード用のメソッド~
LoadVars.toString()メソッドをオーバーライド(上書き)~
することで、URLエンコードしないで送信することができます。

#code(JavaScript){{
////////////////////////////////////////////////
// 内部でtoStringを呼び出しているので、URLエンコードされる
// LoadVarsオブジェクトのtoStringメソッドを一時的に上書きする
/////////////////////////////////////////////////
//  URLエンコードしないsendメソッド
//  LoadVars.sendNoEnc()
LoadVars.prototype.sendNoEnc  = function( url, target, method) 
{
	// 正規toStringを退避
	LoadVars.prototype._toString = LoadVars.prototype.toString;
	// toStringメソッドを上書きする
	//  unescapeをかませる
	LoadVars.prototype.toString = function() {return unescape(this._toString());};
	// _toStringに権限設定 3 : CanDelete=Yes, IsHiden=Yes
	ASSetPropFlags(LoadVars.prototype, "_toString", 3);
	// send実行
	this.send(url, target, method);
	// 退避した正規toStringを戻す
	LoadVars.prototype.toString = LoadVars.prototype._toString;
};ASSetPropFlags(LoadVars.prototype, "sendNoEnc", 3);
/////////////////////////////////////////////////
//  URLエンコードしないsendAndLoad関数
//  LoadVars.sendAndLoadNoEnc()
LoadVars.prototype.sendAndLoadNoEnc = function(url, res, method) 
{
	LoadVars.prototype._toString = LoadVars.prototype.toString; 
	LoadVars.prototype.toString = function() { return unescape(this._toString()); };  
	ASSetPropFlags(LoadVars.prototype, "_toString", 3); 
	this.sendAndLoad(url, res,  method); 
	LoadVars.prototype.toString = LoadVars.prototype._toString;
};ASSetPropFlags(LoadVars.prototype, "sendAndLoadNoEnc", 3);

/////////////////////////////////////////////////////
// LoadVarsオブジェクト
sendData = new LoadVars();
sendData.data1 = "日本語あいうえお";
sendData.data2 = "abcdef";
sendData.sendNoEnc("test.php", "_self", "GET");
}}

**質問・コメント [#h12e3caa]
- リョウ -- [[柴田]] &new{2012-09-11 (火) 13:04:16};

#comment