Xajaxを触ってみる(2日目)

takashi42332008-06-07


今回はタグ付きでテキストを挿入しようと思います.
でも結構困ったことがあって,
Xajaxで,呼び出すメソッドでは,static変数が使えません.
これが結構致命的.

function a ($text) {
	static $i = 0;
	$text = "<div id=" .$id .">" .$text ."(" .$i .")</div>";
        $objResponse = new xajaxResponse();
	$objResponse->prepend("element","innerHTML",$text);
	$i++;
        return $objResponse;
}

prepend()

なんて方法で,連番id付きのdivタグを挿入できないんです.
ちなみに,上記の方法で実行すると,text(0)がひたすら表示されます.

JavaScriptでやれば悩まないような場所で悩む事になります.
で色々試した結果,セッション変数を使うのが賢いみたい.
以下のような感じでやると想定通りの世界のナベアツの動きをしてくれました.


Nabeatsu.php

<?php
session_start();
require_once ("./xajax_core/xajax.inc.php");

/*
 *テキスト挿入
 */
function insert_text($text){

	/*セッション値が無い場合は1を挿入します.*/
        if(!isset($_SESSION['id'])){
	    $_SESSION['id'] = 1;
	  }

	$i = $_SESSION['id'];
	$id = "box" .$i;
	$text = "<div id=" .$id .">" .$text ."(" .$i .")</div>";

        //結果を id = "result" のオブジェクトのvalueに格納する。
        $objResponse = new xajaxResponse();
	$objResponse->prepend("element","innerHTML",$text);
	$i++;
	$_SESSION['id'] = $i;
        return $objResponse;
}

/*
 *世界のナベアツ(同様に3の倍数と3の付く数字だけ文字が大きくなります.)
 */

function three_times_fool(){
        $objResponse = new xajaxResponse();
	for($i = 0; $i < $_SESSION['id'];$i++){
	  if(($i % 3) == 0 || strrchr($i,"3")){ /*3の倍数と3の付く数字のとき大きくなります.*/
		$tag = "box" .$i;
		$objResponse->prepend($tag,"style.fontSize","30px");
	  }
	}

        return $objResponse;
}

/*
 *表示をクリアし,セッションを初期化する.
 */
function clear_text(){
        $objResponse = new xajaxResponse();
	$objResponse->clear("element","innerHTML");
	session_destroy();
	return $objResponse;
	
}




//xajaxオブジェクトにメソッドを登録
$xajax = new xajax();
$xajax->registerFunction("insert_text");
$xajax->registerFunction("three_times_fool");
$xajax->registerFunction("clear_text");
$xajax->processRequest();

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                <meta http-equiv = "Content-Style-Type" content = "text/css">
                <meta http-equiv = "Content-Script-Type" content = "text/javascript">
                <title>xajaxを使って文字を追記していくサンプル</title>
                <?php $xajax->printJavascript('./'); //JavaScriptを出力 ?>
        </head>
        <body>
		Xajaxを使って文字を追加していきます.
                <form>
			<!-- 登録メソッドを呼び出す時はxajax_をつける.-->
			<input type="text" name="text1" id="text1" value = "Xajax">
                        <input type="submit" value="insert" onclick="xajax_insert_text(document.getElementById('text1').value); return false;"> 
                        <input type="submit" value="clear" onclick="xajax_clear_text(); return false;">
                        <input type="submit" value="ナベアツ" onclick="xajax_three_times_fool(); return false;">
                </form>

		<div id="element" name="element" > 
		</div>

        </body>
</html> 

でも,ホントにこの方法であってるのかな?
もっと賢い解決方法を知ってるヒトがいたら教えて下さい.


あと余談だけど,

$objResponse->prepend($tag,"style.fontSize","30px");

font-sizeじゃダメで,fonSizeを変更しなきゃだめみたい.
どうもJavaScriptのスタイルをいぢってるみたいだね.



Xajax オモロー!