ぱるけえすぱー湖
  ぱるけえすぱーにゃと新築マンション
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
AJAX(えいじゃっくす)
珍しく勉強ネタ。
新しい技術としてAJAXというものを勉強中。
JavaScriptの眠る財宝=AJAXを掘り起こせ!みたいな。

で、今回挑戦したのは、リンクをクリックしたときの
カウント数をDBに登録するというもの。

試行錯誤の結果、この方法がベストだったんだよね。
でもAJAXを使ってGETで渡すのは簡単だったんだけど
POSTでうまく値が渡らなくて。

とりあえず、この方法でやったら大丈夫だったので
苦しんでる人は、騙されたと思ってお試しアレ。

まずはメインのソースに下記のように記述。

// リンクがクリックされたとき
function FU_result(form,cross_cd,box_y,box_x,box_count)
{
var post_data;
post_data = "division=301&cross_cd=2020&kind=20&box_x=1&box_y=2&plus_sql=";

// POSTでカウントするページ(clickrate_sch.php)へ
// ※この関数が重要!!
sendRequest(FU_next_page,post_data,'POST','/clickrate_sch.php',true,true)
}

function FU_next_page()
{
// 次のページに飛ばすよ
document.form1.action = "next_page.php";
document.form1.submit();
}



そして下記がその関数。

//=======================================================
// SYSTEM : 暫定版クロスブラウザAjax用ライブラリ
// PROGRAM : XMLHttpRequestによる送受信を行います
// FILE NAME : ajasql_ajaxXXX.js
// CALL FROM : Ajax クライアント
// AUTHER : Toshirou Takahashi http://jsgt.org/mt/01/
// SUPPORT URL : http://jsgt.org/mt/archives/01/cat_ajasql.html
// CREATE : 2005.6.26
// UPDATE : v0.36 2005.7.20 (oj.setRequestHeader)がwinieでunknown
// を返すことが判明し修正(unknownなのに、動作はします)
// UPDATE : v0.35 2005.7.19 POSTのContent-Type設定をOpera8.01対応
// UPDATE : v0.34 2005.7.16 sendRequest()にuser,password引数を追加
// UPDATE : v0.33 2005.7.3 Query Component(GET)の&と=以外を
// encodeURIComponentで完全エスケープ。
//
//---------------------------------------------------------------
////
// XMLHttpRequestオブジェクト生成
//
// @sample oj = createHttpRequest()
// @return XMLHttpRequestオブジェクト
//
function createHttpRequest()
{
if(window.ActiveXObject){
//Win e4,e5,e6用
try {
return new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (e2) {
return null ;
}
}
} else if(window.XMLHttpRequest){
//Win Mac Linux m1,f1,o8 Mac s1 Linux k3用
return new XMLHttpRequest() ;
} else {
return null ;
}
}

////
// 送信関数
//
// @sample sendRequest(onloaded,'&prog=1','POST','./about2.php',true,true)
// @param callback 受信時に起動する関数名
// @param data 送信するデータ
// @param method "POST" or "GET"
// @param url リクエストするファイルのURL
// @param async 非同期ならtrue 同期ならfalse
// @param sload スーパーロード trueで強制、省略またはfalseでデフォルト
// @param user 認証ページ用ユーザー名
// @param password 認証ページ用パスワード
//
function sendRequest(callback,data,method,url,async,sload,user,password)
{
//XMLHttpRequestオブジェクト生成
var oj = createHttpRequest();
if( oj == null ) return null;

//強制ロードの設定
var sload = (!!sendRequest.arguments[5])?sload:false;
if(sload)url=url+"?t="+(new Date()).getTime();

//ブラウザ判定
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 ;

//受信処理
//operaはonreadystatechangeに多重レスバグがあるのでonloadが安全
//Moz,FireFoxはoj.readyState==3でも受信するので通常はonloadが安全
//Win ieではonloadは動作しない
//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);
alert(oj.responseText);
}
}
}

//URLエンコード
if(method == 'GET') {
if(data!=""){
//&と=で一旦分解しencode
var encdata = '';
var datas = data.split('&');
//
for(i=0;i {
var dataq = datas[i].split('=');
encdata += '&'+encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
}
url=url + encdata;
}
}

//open メソッド
oj.open(method,url,async,user,password);

//ヘッダセット
if(method == 'POST') {

//このメソッドがWin Opera8.0でエラーになったので分岐(8.01はOK)
if(!window.opera){
oj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
} else {
if((typeof oj.setRequestHeader) == 'function')
oj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
}
}

//デバック
//alert("////jslb_ajaxxx.js//// \n data:"+data+" \n method:"+method+" \n url:"+url+" \n async:"+async);

//send メソッド
oj.send(data);
}
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://parque.blog23.fc2.com/tb.php/105-db8e44cd
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。