WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート 2011年05月

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

表題のとおりですが、よく、データの保存画面で、サブミット時に自分自身にPOSTして


if(isset($_POST['submit']))
{
//保存する動作
}
こんな感じで、保存するかどうかの処理をしています。で、保存後、同じページにとどまりたい時
再読込で、「フォームデータを再送信しますか?」というアラートを出さいないために。また、自分自身にリダイレクトします。

if(isset($_POST['submit']))
{
//保存する動作
$this->_redirect();
}
こんな処理をよくやるのですが、この時、ステータスコードを307(Moved Temporarily)にすると、リダイレクト先にそのままデータも一緒にPOSTされます。つまり、この処理はリダイレクトの無限ループを起こします。

以前、どこかで、Moved Temporarilyは302という情報をみて、それで、リダイレクトしてたのですが、1.1から307に変更されてるというのを知り、変更してみたところ発見しました。ちなみに、301(Moved Permanently)、303(See Other)ではGETになります。たしかに、意味合い的にも307は最初のリクエストと同じ状態というのはなんとなくうなずけます。

よく考えたら、このシチュエーションでは303の方がふさわしいと思ったので、今回は303に変えて対処しました。

    このエントリーをはてなブックマークに追加

backgroundPositionのanimateが上手く動かないので調べてみました。
動かなかったのはこんなコードです。


$(".header").stop().animate({backgroundPosition: '10px 20px'});
このコードは1.4.4までは一応動きます。「一応」というのも、x軸方向にしか動かないからです。
animateをどのように実装しているのか見ていませんが、おそらく、ちゃんと動かすのが難しいのでしょう、1.5からは、animateのcssプロパティは基本的に単一の数字のみ受け付けるように変わったようです。

$(".header").stop().animate({backgroundPosition: '10'});
でx軸のアニメーションのみ出来るようです。


All animated properties should be animated to a single numeric value, except as noted below; most properties that are non-numeric cannot be animated using basic jQuery functionality. (For example, width, height, or left can be animated but background-color cannot be.)



※2011/05/11 19:24追記
backgroundPositionのanimateはIEの6~8で挙動が怪しかったので他の方法で実装することにしました。

    このエントリーをはてなブックマークに追加

jQuery1.6リリース

2011-05-11 01:58

2011年5月3日に1.6がリリースされました。
1.5系から1.6には「Breaking Changes」と称して、かなり厳しい変更がありました。
詳しくはリリースノートにありますが、attr()で動的に変更されたattributeを取得できなくなりました。静的にHTMLに書いてあるattributeのみ取得できます。例えば、チェックボックスがチェックされてるかどうかチェックするのに


if($("#someCheckbox").attr("checked"))
{

}
のようなコードは動かなくなります。かわりにprop()というメソッドを使うか、リリースノートではis()を使うように推奨してます。

if($("#someCheckbox").is(":checked"))
{

}
またcheckboxのチェックを外すのに

$("input[type=checkbox]").removeAttr("checked");


$("input[type=checkbox]").removeProp("checked");
に置き換える必要があります。当然input textのvalueも取得できません。val()に置き換える必要があるでしょう。代わりにattr()のパフォーマンスが良くなったようです。

そこそこ手を入れなければならない人が多そうなので、ブーイングの出そうな?変更ではあると思いますが、なんとなく気持ちのわかる変更だと思います。
・attrで静的なものしか取れなくすればパフォーマンスアップ

・静的な物しか取れないattrを作ろうか?

・ネーミング的にattrをそうしてしまうのがベスト
こんな感じでしょうかね。メソッドのネーミングは後々ライブラリ判りやすさに効いてくる、割と重要なファクターだと思います。

    このエントリーをはてなブックマークに追加

Zend Framworkのルート設定で勘違いしていた所があったので書いておきます。
(私の使用環境ではyamlでルートを書けるようにしてるので、随時読み替えてください)
たとえば
/shinjuku/
/shinjuku/shops
この二つのURLをAreaSiteControllerに持って行きたい時


mb_area_site_index:
route: /:group/
defaults:
module: mobile
controller: area-site
action: index

mb_area_site:
route: /:group/:action
defaults:
module: mobile
controller: area-site
と二つルートを書いてたのですが、これは

mb_area_site:
route: /:group/:action
defaults:
module: mobile
controller: area-site
action: index
これ一個だけでOKです。:actionのプレースホルダを書いておいて、デフォルトのアクションを指定しておけば、省略時にそっちに行きます。

    このエントリーをはてなブックマークに追加

「あの関数って、こんな感じで実行するとどうなるんだっけ?」
とかちょっと確認したい時、いちいち.phpファイルを作って、上げて表示はめんどくさいですよね。
eclipseなんかでサッと実行出来る環境があれば問題ないのですが、それもないとき、linuxのコマンドラインから実行できないかと思って調べました。


php -r "echo sprintf('%2d', 10);"
-rオプションです。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。