カテゴリー : JavaScript

SSL通信でFlashから別ドメインのPHPにPOSTする時のIE6/7/8のエラー

■環境
①https://hoge.com/index.html
・トップページにはFlashのフォームがあり、②のサーバにデータを送信する。

②https://example.com/index.php
・Flashからデータを受け取りDBに登録する。
・XMLを出力しFlashに返す。

■現象
・SafariやChrome・FireFox・IE9では正常に登録できる状態で、
IE6/7/8ではPHPへデータを送信できていない。

■その他
・https://example.com/crossdomain.xmlは設置済み

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>

■解決策
いろいろ調査した結果、example.comに置いてあるPHPのCache設定がよくないらしい、、、
IEのバグらしくSSLでアクセスしたときにsession_cache_limiterがnocacheだとFlashから読み込めないんです。

SSL 経由でファイルのダウンロードを Internet Explorer キャッシュ コントロール ヘッダーが機能しません

PHPのsession_start();を行う前に

session_cache_limiter('private');

を追記。

session_cache_limiter

そして、ページを描画する前にheaderでLast-Modifiedを送信することで、
キャッシュに残っているPHPを読み込みなおしてくれます。

header("Cache-Control","public");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");

今回はFacebookのJavascript SDKが使い物にならず、
PHPのSDKを使うことから始まりました。
そもそもFlashから直接SDKを使用すると、OAuth以外まともに動いてくれませんでした。

PHP用のFacebook SDKは優秀で、コードを殆ど書かなくても使用できるのが便利です。
TwitterのOAuthよりかなり簡単です。
しばらくは、自前のFlash用SDKを使用して、Facebookとのやりとりを行うとします。

【jQuery】Twitterタイムラインの検索丸コピサンプル

Twitterタイムラインの検索丸コピサンプルです。
これを丸っとコピって実行すれば、タイムラインの検索結果が取得できます。

たまにツイッター検索結果を表示しているサイトで、表示されていない場合があります。
そんなサイトはきっと、PHPでツイッターAPIを叩いているんだと思います。

PHPで検索結果などOAuthを通さないAPIのアクセスは、
自サーバ→ツイッターサーバにアクセスするので、
そのページにアクセスがあるたびに、APIの回数制限のカウントが減っていきます。(たしか、OAuth通さない時は、1時間に100回だった気がします。)

そこで、Javascriptを使います。
Javascriptからの非同期通信の場合、APIの回数制限のカウントは、
クライアントのIPアドレスからになるので、
サーバで同時にアクセスがあろうとも関係ないのです。

PHPだとサーバにアクセスしている全員が閲覧できなくなりますが、
JSだとアクセス元のIPだけ閲覧できないので、自業自得ってことで対応できます。

基本的にOAuthしないAPIのアクセスはJavascriptを使った方がよさそうですね。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Twitter検索サンプル</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
$(document).ready(function() {
        $str_search = "so-lat.com"
        var $getJsonUrl="http://search.twitter.com/search.json?q=" + $str_search + "&rpp=5&callback=?";
        var $data;
        $.ajaxSetup({scriptCharset:'utf-8'});
        $.getJSON($getJsonUrl, function($data) {
            var $str_html = "";
            for(var $i in $data["results"]){
                $str_html += '<li>';
                $str_html += '<img src="'+$data['results'][$i].profile_image_url+'" alt="" width="50" height="50" />';
                $str_html += $data['results'][$i].text;
                $str_html += '</li>';
            }
            $("#twitter").html($str_html);
        });
});
</script>
</head>
<body>
<ul id="twitter"></ul>
</body>
</html>

【jQuery】全てのCheckboxをON/OFF切り替える

jQueryを使用して、テーブルの一番上にあるチェックボックスをクリックする度に、
ON/OFFを切り替えます。

数行書くだけなので、複数のチェックボックスがあるときは、入れておくと使いやすくなります。

jQuery

1
2
3
$('#all_check').change(function(){
    $("input:checkbox").not(this).each(function(){this.checked = !this.checked ;})
});

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<table>
  <tr>
    <th><input type="checkbox" id="all_check" /></th>
    <th>名前</th>
  </tr>
  <tr>
    <td><input type="checkbox" name="id[]" value="1"/></td>
    <td>テスト1</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="id[]" value="1"/></td>
    <td>テスト2</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="id[]" value="1"/></td>
    <td>テスト3</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="id[]" value="1"/></td>
    <td>テスト4</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="id[]" value="1"/></td>
    <td>テスト5</td>
  </tr>
</table>

【jQuery】jquery.postでInputやtextareaを簡単に取得できる方法

jQueryのjquery.postでInputやtextareaを簡単にPOSTできる方法です。
毎回IDを$(‘#id’).val()で取得するのはめんどくさいので、
Input Textarea Selectの値をeachで取得してdata配列に入れます。
その後にjQuery.postでPOSTしたいPHPに値を送ります。

$.ajaxでも同じようにできるので、多くのコードを書かなくてもよくなります。

1
2
3
4
5
6
var data = {};
$('input,textarea,select').each(function(){
    data[$(this).attr('id')] = $(this).val();
});

$.post("test.php", data );

【jQuery】トップページに画像スライドを入れる

nivoslider

nivoslider

サイトのトップページ今まではFlashでスライドショーをやっていましたが、
jQueryで簡単にできるみたいなので導入してみました。

エフェクトや時間など変更するだけで簡単にかっこいいスライドショーができます。

demos

WordPressにも組み込めるようなので、
今度試しにやってみたいですね。

NIVO SLIDER