JSONがinvalidでもjQuery.getJSON()はエラーを吐かない
記事のタイトルで言いたいことは言い切っちゃているんですけれども。
jQuery 1.4.2 の $.getJSON() 、もしくは $.ajax() でリクエストしたJSONファイルがinvalidだった場合、エラーは吐きませんがコールバック関数が実行されません。
[jQuery] getJSON callback not firing? - jQuery Forum
なんでinvalidなのかと調べたところ・・・、JSONでは文字列は必ずダブルクォートで囲まないといけないことが判りました。シングルクォートではダメです。それからオブジェクトリテラルの左のオペランドにも、ダブルクォート省略不可!あー、なんか初歩的なところでつまづいています。
A string is a collection of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.
何しろエラーが出ないので、何が悪いのかわかりにくいです>< これで2時間はハマってしまった・・・。。
[MT]値に日本語が含まれるかどうか判別して条件分岐する
記事のタイトルが斜体になっているデザインを実装する際、試行錯誤してみた話。
日本語が斜体になると激しく読みにくいので、日本語が含まれている場合は通常の字体で表示したい。そこで慣れない正規表現を使って頑張ってみました。
日本語が斜体になるとどうなるか # ←読みにくい
日本語が斜体になるとどうなるか # ←こっちのが当然読みやすい
<$mt:EntryTitle setvar="entry_title"$>
<mt:If test="$entry_title =~ /[^\w\s\-\&\;\:\@\|\\\/\=\(\)\'\%\$\#\!\[\]\{\}\`\*\+\?\<\>]+/">
<$mt:Var name="entry_title"$>
<mt:Else><i><$mt:Var name="entry_title"$></i>
</mt:If>
日本語自体を正規表現ではマッチさせることができないので、あらゆるアスキー文字の否定(ある文字以外の文字)という形でマッチさせてみました。マッチすると通常のMTタグが出力され、マッチしないと<i>で囲まれたMTタグが出力されます。
しかし、我ながら稚拙な書き方だと思いますし、これで例外なく正しくマッチできているのかは自信がありません。。。きっともっとスマートなやり方はあるはずです。
ちなみにtestモディファイアは中にPerlの式を書くことができるモディファイアです。
<mt:If>に仕込んでBool値が返るPerl式を記述しておけば、TRUEが返ったときに中身を実行させることができます。
MySQL4.0→5.1へ移行
MTOSからWordPressに年末に乗り換えたばかりなのですが、その際、MySQLのバージョンアップを行わなければなりませんでした。 WordPress 2.9の推奨環境がMySQL 4.1.2以上となった一方、使っていたDBはMySQL4.0だったからです。
ここのサーバーはさくらのレンタルサーバ(スタンダードプラン)なのですが、ここではデータベースが1つしか作成できません。 ・・・ということで使用中のデータベースを削除し、新しくデータベースを作成するしかありませんでした。
しかし一旦削除する、というのはなかなか勇気が要ります。なんせミスしたら復旧できませんからね。。
とりあえず念には念をってことで以下のように作業しました。WordPressに移行する前だったので、データベースにはMTOSのデータが入っている状態でした。
- 現状使用しているMTOSの機能でバックアップを作成(一応、保険的な感じで・・・)
- レンタルサーバのコントロールパネルからphpMyAdminを使い、データベースのエクスポートを行ってバックアップファイルを作成
- ローカル環境(XAMPP)のMySQL5.1に(2)でエクスポートしたファイルをインポートし、問題なくインポートできるか確認
- (3)で問題がないことを確認できたら、レンタルサーバのコントロールパネルから現データベースを削除
- データベース削除を行うと「データベースを作成」みたいなボタンが現れるので、データベースをMySQL5.1で作成
- 作成したデータベースのphpMyAdminから、(2)で作成したファイルをインポート
- MTOSの mt-config.cgi の内容を新データベースに合わせて修正
- MTOSにログインして問題がないか確認
これらの作業の中で特筆すべきポイントはデータのエクスポート、インポートのところですね。文字コードが一緒でないと、日本語部分が文字化けしてしまいます。
まず、phpMyAdminにログインする際に「日本語 - Japanese (utf-8)」を選択しましょう。
サーバーによっては「日本語 - Japanese」としか表示されない場合もありますが、問題ありません。さくらのレンタルサーバではこれでした。
それと、ログイン後の画面の「MySQL の接続照合順序:」でインポート側とエクスポート側で同じものを選択します。「utf8_general_ci」か「utf8_unicode_ci」あたりかと思います。
左フレームから該当データベースを選択し、右上メニューの「エクスポート」をクリック。
エクスポートの際は「ファイルに保存」するにチェックを入れる以外の設定はとりあえずそのままで。
エクスポートされた *.sql ファイルをエディタで開いてみて、文字コードがUTF-8になっているか、日本語のデータが文字化けしていないかを念のため確認。インポート時には「ファイルの文字セット」で「utf8」を選択しましょう。
MTみたいに静的なファイルを書き出すCMSだと、データベースを削除してもファイルは残るのでサイトには影響がないですが、動的生成のCMSの場合はデータベース削除はNGですね。サイトが見えなくなっちゃいますので。どうしても削除する場合、作業中には「現在メンテナンス中」的な画面を代わりに表示させるとか、そういった対応が必要なのかなと。
追記 - 2010-01-22
ドンピシャな内容の記事を発見したので、リンクをさせていただきます。コチラ様の方がずっと丁寧!
さくらインターネットのレンタルサーバで WordPress 2.9 へアップグレードできない方へ - Bamboo Studio * バンブースタジオ | Blog™
追記 - 2010-01-25
さらに、本文中の「~」(全角チルダ)が「?」に文字化けしてしまう問題について。解決法について詳細な記事を発見。
小粋空間: Movable Type で「~」が「?」に文字化けする事象や日本語のタグが合算できない不具合を解消する
すでに作られてしまったテーブルについては、phpMyAdminにおいて
該当テーブルを選択 → 「構造」メニュー → 「すべてチェックする」 → その右のエンピツマークのアイコンをクリックして「編集」モードに → 「照合順序」に指定のあるものについては「utf8_general_ci」に変更 → 「保存する」
これを全てのテーブルで行うとそれ以降、「~」が文字化けしなくなります。
また、こんなプラグインも見つけました。
WordPress Plugins/JSeries » Force Wave Dash (波ダッシュ矯正)
記事を保存する際に「~」(全角チルダ)を「〜」(波ダッシュ)に強制的に変換してくれるプラグインです。


