開発メモ,主に補足by子連れ親父プログラマー

2011-08-05

外部のサイトに置いたphpからのjsonデータをjqueryで読み込む

簡単にできると思って実装してしまって、実際に外部のサーバーに設置してから、ありゃ動かないわ、
あ〜そうだった、Javascript って外部のサーバーのファイル読めないんだっけ、と気づいていつもあきらめていたんだが。
これを ajax の crossdomain と言うらしい。
検索すると jquery のプラグインとかで沢山ヒットするが、jquery のドキュメントを見ると1.5以降 jquery 単体でも実現できるようになっている。
ということで試してみた。
まず javascript 側は、
$.ajax({
    url: "http://xxxxxxxxxxxxxx/get_json.php",
    data: "name=123",
    dataType: 'JSONP',
    async: false,
    crossDomain: true,
    success: function(data){
        console.log(data);
    }
こんな感じ。dataType を JSONP にするのがミソだ。データは必ず get で送られるので
type: "POST"
とか書いても意味はない。
で、php 側は
echo $_GET['callback'].'({"error":"no data"})';
こんな感じ。
普通の json 形式データを()で囲んで、その前に
$_GET['callback']
をくっつける。

2011-08-02

OSX、terminal で postgres を操作していて、なぜか SELECT * FROM した時だけ文字化けする時の話

そんな馬鹿な、というような話だが。
postgres なので EUC_JP の文字コードのDBがまだ残っていたりする。
ということで今、terminal の環境設定の詳細の文字エンコーディングが
日本語(EUC)
になっていたとする。この状態で、psql に入り、DB操作を開始、「やべえ、このDBは UTF-8 だった」
と気づいて、terminal の環境設定の詳細の文字エンコーディングを
Unicode(UTF-8)
に変更したとする。
そうすると、
SELECT name FROM items;
というようにひとつのカラムをセレクトする場合は文字化けしないが、
SELECT * FROM items;
というように全部をセレクトすると文字化けする。
もちろん、一旦 terminal を終了してちゃんと
Unicode(UTF-8)
になってるのを確認してから psql に入れば文字化けしない。
まったくもって馬鹿馬鹿しい現象だが、やってる本人は一体何故なのかさっぱり分からない。
そして一日を棒にふる訳である。

2011-08-01

JSON形式のつづき。DBからselectしたデータが連想配列になってるのでそのまま処理したい編。

なにはともあれ、DBからselectしたデータがある訳です。
で、selectしたデータのid列の値がキーになっているとなにかと便利な訳ですよ。
後から参照する時にidだけ分かれば一発ですから。
ということでデータが今phpでこんなになってるとします。
Array
(
    [4] => Array
        (
            [id] => 4
            [year] => 2012
            [created] => 2011-07-26 19:37:37.985709
        )

    [7] => Array
        (
            [id] => 7
            [year] => 2011
            [created] => 2011-07-27 16:43:11.697075
        )
)
こいつをJSON形式で出力したいってことです。
最終的にこんな形になればいいので、
{
    "4": {
        "id": "4",
        "year": "2012",
        "created": "2011-07-26 19:37:37.985709"
    },
    "7": {
        "id": "7",
        "year": "2011",
        "created": "2011-07-27 16:43:11.697075"
    }
}
昨日のファンクションを以下のように修正。
$json = "{".toJson($data)."}";

function toJson($data) {   
    $json = array();
    foreach ($data as $string => $value) {
        $key = "\"$string\":";

        if (is_array($value)) {
            $json[] = sprintf("%s {%s}", $key, toJson($value));
        } else {
            $json[] = sprintf("%s \"%s\"", $key, addslashes($value));
        }
    }
    return implode(", ", $json);
}
こうすると、例えば返って来た json を javascript で例えば data とかいうオブジェクトに入れたとしたら、
data[4].year
とかで処理できる訳です。
    var tbl='';
    for (key in data) {
        tbl += '<tr><td>'+data[key].year+'</td></tr>";
    }
みたいにね。

このブログを検索

Powered by Blogger.

ラベル

php (17) jQuery (13) OSX (10) MySQL (8) Javascript (7) Postgres (7) port (7) apache (6) Java (3) Smarty (2) html (2) pear (2) FCKEditor (1) XAMPP (1) css (1) git (1) perl (1) ruby (1)

Facebookバナー