JavaScript – 文字列で渡されたオブジェクトを実行する

hoge.fuga.piyo()を文字列で実行させたいみたいな時はこうする

var love = {
the: {
aya: function() {
console.log('love');
}
}
};
var callbackName = 'love.the.aya';
var split = callbackName.split('.');
var callback = window;
while (split.length > 0 && callback !== undefined) {
callback = callback[split.shift()];
}
if (callback !== undefined) {
callback();
}

まあこんなことすることないと思うけどw

JavaScript – UAを利用してSafariを判定する

ユーザーエージェントは下記コードで取得できる。

window.navigator.userAgent.toLowerCase();

注意したいのはSafariという文字列がChromeUAにも含まれているという点。単純にUASafariという文字列で検索してあったからSafariだって判定することはできない。まず各主要ブラウザのUAを見ていこう。

Firefox

mozilla/5.0 (macintosh; intel mac os x 10.10; rv:41.0) gecko/20100101 firefox/41.0

Chrome

mozilla/5.0 (macintosh; intel mac os x 10_10_5) applewebkit/537.36 (khtml, like gecko) chrome/45.0.2454.101 safari/537.36

Safari

intel mac os x 10_10_5) applewebkit/601.1.56 (khtml, like gecko) version/9.0 safari/601.1.56

ということなのでSafariを判定する場合は

if (/safari/.test(window.navigator.userAgent.toLowerCase()) && !/chrome/.test(window.navigator.userAgent.toLowerCase())) {
console.log('safari');
}

JavaScript – IE8,IE9でクロスサイトドメインでAjax通信する

IEの古いバージョンでもAjax通信したいってかした方が実装が楽になる案件があったので書いてみた。出張先のノートだからIEVM立てるのが面倒なので多分こんな感じで動くだろうってコードを書いとくw 多分なんか動かないかも。

var ieAjax = function(obj) {
xhr = new XDomainRequest();
xhr.onerror = function() {
obj.error(xhr.responseText, xhr.contentType);
};
xhr.onload = function() {
obj.success(xhr.responseText, xhr.contentType);
};
xhr.open(obj.method, obj.url);
xhr.send(obj.method === 'POST' ? JSON.stringify(obj.data) : null);
};
ieAjax({
method: 'POST',
url: 'http://www.yahoo.co.jp',
data: {
hoge: 'value',
hoge2: 'value2'
},
success: function() {
alert('success!!');
},
error: function() {
alert('error!?');
}
});

IEの古いやつ以外は普段通りXMLHttpRequestを使えばいいと思う。Ajax通信するためにjQuery入れるなんて話とかあるけど、Ajaxの実装って非常に楽だからそのためだけにjQuery使ってる人は直書きに挑戦してみるといいよw

PHP – JSONをPOST送信する

こんな感じでいける

<?php
$opts['http'] = [
'method' =>'POST',
'header' => 'Content-type: application/json',
'content' => json_encode(['key' => 'value'])
];
echo file_get_contents(
'http://localhost:8080/test.php',
false,
stream_context_create($opts)
);

curlでJSONをPOST送信する

curlでPOST送信するのもよくわかんないのにJSONリクエストとか面倒くさい…w でも調べてみたらこういう感じでいけた。JSON文字列の生成が面倒くさかった。でもオブジェクト生成してJSON.stringfyみたいなことすればよかったと後で気づいたw

curl -H "Content-type: application/json" -X POST -d '{"hoge":{"value":"hoge","value2":"chingching"},"fuga":"girl","d-anime":"store"}' http://localhost:8080/test.php