ここでは、サーバー側を
Perl にして、XMLHttpRequestな方法でのGETとPOSTによるJSONフォーマットでのデータ交信を試します。サーバー側を
Perl に変った以外は
PHPでGET,POST とまったく同じです。
GETで送/受信
POSTで送/受信
【 暫定ライブラリ jslb_ajax02.js 】
//XMLHttpRequestオブジェクト生成
//createHttpRequest()
//
// @returns XMLHttpRequestオブジェクト またはnull
//
function createHttpRequest()
{
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;
}
}
// requestFile( callback , data , method , fileURL , async )
//
// @param callback 受信時に起動する関数名
// @param data 送信するデータ
// @param method "POST" or "GET"
// @param fileURLリクエストするファイルのURL
// @param async Asyncならtrue Syncならfalse
// --@param user A username for authentication if necessary.
// --@param password A password for authentication if necessary.
// パスワード等はとりあえず省略
//
function requestFile( callback , data , method , fileURL , async )
{
//XMLHttpRequestオブジェクト生成
var oj = createHttpRequest()
if( oj == null ) return null
//ブラウザ判定-->別関数にした方がすっきりする?
var ua = navigator.userAgent
var safari = ua.indexOf("Safari")!=-1
var konqueror = ua.indexOf("Konqueror")!=-1
var mozes = ((a=navigator.userAgent.split("Gecko/")[1] )?a.split(" ")[0]:0) >= 20011128
//Konquerorはonloadが不安定http://jsgt.org/ajax/ref/test/response/responsetext/try1.php
if(window.opera || safari || mozes)
{
oj.onload = function () { callback(oj) }
}
else
{
oj.onreadystatechange =function ()
{
if ( oj.readyState == 4 )
{
callback(oj)
}
}
}
//open メソッド
oj.open( method , fileURL , async )
if(method == 'POST')
{
//このメソッドがWin Opera8でエラーになったので、とりあえず分岐2005.5.20
if(!window.opera)
oj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
}
//send メソッド
oj.send(data)
}