MW211 EXIT

devlog
jQuery/Ajax入門のつまづき
2012年01月05日
前出の通り、
┌──────────────────────────────────────┐
│$(function() {                                                              │
│  setInterval(function(){                                                   │
│      $("#a").parent().load("ajax.php #a");                                 │
│    },                                                                      │
│    3000  // 3秒でリロード                                                  │
│  );                                                                        │
│});                                                                         │
└──────────────────────────────────────┘
だったり
┌──────────────────────────────────────┐
│$(function() {                                                              │
│  setInterval(                                                              │
│    function(){                                                             │
│      $.get(                                                                │
│        "ajax.php",                                                         │
│        function(data){                                                     │
│          $("#a").html($("#a", data).html());                               │
│        }                                                                   │
│      );                                                                    │
│    },                                                                      │
│    3000  // 3秒でリロード                                                  │
│  );                                                                        │
│});                                                                         │
└──────────────────────────────────────┘
だったりして、簡単にreload的なことができる。
#「ajax.php」ってところが、自身のファイル名になる。

基本reloadだからレイアウトもまったく一緒で簡単簡単、…なんて思っていたら
大きな落とし穴に嵌ってしまった。
(しかも、IEだけ現象が発生するというタチの悪いパターン)

結論から言うとメモリリーク。
自身を呼び出すのだが、その自身は自身を呼び出す為のAjaxタイマを実装してるわけだ。
子が孫を呼び、孫が曾孫を呼ぶ。
そりゃメモリリークもするかもね。

ってことで、自身を迂闊にAjaxタイマではreloadしちゃダメなんだね。

こういう時には、従順なそれ用のphpファイルを呼ぶようにしなきゃってことさ。
分類:注意、jQuery
セレクタの灯台もと暗し
2011年12月09日
こういう階層になってて…
┌──────────────────────────────────────┐
│<div id="a">                                                                │
│  <div id="aa">                                                             │
└──────────────────────────────────────┘
「ID="a"」の子セレクタ「ID="aa"」を指定したいって時に出くわした。

┌──────────────────────────────────────┐
│#a > #aa                                                                    │
└──────────────────────────────────────┘
とかかな?と悩んだが…

IDって親だろう子だろうが全体で一意なので
┌──────────────────────────────────────┐
│#aa                                                                         │
└──────────────────────────────────────┘
で、いいんです。

こんな単純なことだが、いろいろやってると混乱してしまうのだ。
手を読みすぎて二歩を犯してしまったり、合併の繰り返しで
自社株を大量に保有してしまうようなもんだ。(例えがわかりにくい?)
分類:CSS、注意、jQuery
PHP/NULLを文字列結合すると文字型になる
2011年10月25日
「gettype()」って便利な関数があって、変数のデータ型を調べられるのだが、
以下のような結果となった。
┌──────────────────────────────────────┐
│echo gettype(NULL);                                                 →NULL  │
│echo gettype(NULL . NULL);                                          →string│
└──────────────────────────────────────┘
つまりは、NULLを文字列結合すると文字型扱いとなるのだ。

ってことは、「is_null(NULL . NULL)」は偽となってしまうのである。

これは変数を介した時にハマりやすい罠だ。
「$c = $a . $b;」で「if (is_null($c)) {…」とかって処理を書いてしまうと
「$a」も「$b」もNULLの場合、当然真になる…なんて間違いを犯してしまうことになる。
分類:PHP、注意
定数の値
2011年09月25日
定数の値はたいてい「1,2,3…」とかだ。
┌─┬─┐
│ 1│男│
├─┼─┤
│ 2│女│
└─┴─┘
みたいな感じ。

ふと、数値じゃなくてもいいんじゃね?とか思い、「male、female」の頭文字をとって
┌─┬─┐
│m │男│
├─┼─┤
│f │女│
└─┴─┘
な~んて定義してみる。

同じじゃん。こっちの方が直感的でわかりやすいし。オレって天才。
なんて思っていると実は落とし穴に嵌っていることに後から気づく。

そう、ソート順のキーに指定した場合「女→男」の順なってしまうのだ。

定数の値は、並び順の番号と心得るべし。

#順番については男尊女卑ではありませんのであしからず
分類:SQL、注意、設計
PHP/submitボタンのname属性
2011年09月18日
うっかり、フォームの送信ボタンを
┌──────────────────────────────────────┐
│<input type="submit" name="submit" value="送信"/>                           │
└──────────────────────────────────────┘
とかってやって、name属性を「submit」に揃えたりすると、
JavaScriptのsubmitコマンドが動かなくなる(以下のようなやつ)。
┌──────────────────────────────────────┐
│this.form.submit();                                                         │
└──────────────────────────────────────┘
競合してしまうようだ(submitメソッドが上書される)。

JavaScriptでsubmitしなければ、問題ないので気にならないことが多いが
はじめから「submit」以外のname属性にするように心がけておいた方がよいだろう。
分類:PHP、注意
C言語/先頭0埋めの罠
2011年09月07日
C言語においてソース上に以下の表記をした場合、以下の値となる。

    「10」→「10」(10進数とみなされるため)
   「010」→「 8」( 8進数とみなされるため)
  「0x10」→「16」(16進数とみなされるため)

意外に見落としがちなのが、8進数の表記。
つい先頭位置合わせで以下のような記述をしてしまいがちだ。

   a = 0012;
   b = 0123;
   c = 1234;

この場合、aは12に、bは123には…当然ながらならない。
ちなみにこの先頭0埋めのことを「ゼロサプレス」…とは言わないから合わせて注意。
(っていうかこの文章を書いていて気づいた)
「ゼロサプレス」は「12→0012」ではなく、「0012→12」のことをさす。
「12→0012」のことは、「ゼロパディング」という。
分類:C/C++、注意
PHP/GETにGET
2011年09月04日
┌──────────────────────────────────────┐
│<form method="post" action="a.php?b=c">                      →「a.php?b=c」│
└──────────────────────────────────────┘
formのaction属性で指定するURLにGETパラメータを付加した場合
POSTの場合は、GETパラメータが引き継がれる。

しかし、GETの場合はクリアされてしまう。
┌──────────────────────────────────────┐
│<form method="get" action="a.php?b=c">                           →「a.php」│
└──────────────────────────────────────┘
(雪だるま式に)GET転がしができるかと思ったら、大間違い。
POSTではうまくいってもGETに変えたらハマってしまうってことがあるので要注意。

回避策としては「<input type="hidden"~」に切り換える。
┌──────────────────────────────────────┐
│<form method="get" action="a.php">                           →「a.php?b=c」│
│<input type="hidden" name="b" value="c">                                    │
└──────────────────────────────────────┘
分類:PHP、注意
前へ 1 2 3 次へ