Ajax通信(その3)

次に実際にJSONPを使った通信をしているサンプルを作ってみようと思う。
今回はあくまでもクライアント側の実装についての勉強なので、サービス側は既に存在するものを使用する。


以下は、ようつべに対してキーワードを送信し、ヒットした10件のサムネイル画像を表示する「ローカルアプリ」
すごいね〜、これ、ソースコードをまるまるコピペしてローカルファイルに保存してブラウザで開くだけで
クライアント・サーバ形式アプリとして使えるんだぜ?

<html>
  <head>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.3.2");</script>
    <script type="text/javascript">
      //検索処理
      function search(keyword) {
        //初期化
        $("#videos").text("Loading...");

        //ajax通信(引数として、通信時に必要なパラメータをJSON形式でセットする。)
        $.ajax({
          dataType: "jsonp", //通信方式を指定する。ここではJSONP。
          data: {            //通信で指定するパラメータを、これまたJSON形式で記述。
            "vq": keyword,
            "max-results":"10",
            "alt":"json-in-script"
          },
          cache: true,
          //通信先のURLを指定。
          url: "http://gdata.youtube.com/feeds/api/videos",

          //★↓これがJSONPにおける肝であるコールバック関数。
          //    処理に成功した場合はこの関数が返り値データdataとともに即座に実行される。
          //    で、クライアント側のJavascriptでは、取得データを材料にして、
          //    必要な処理を実行させる。
          //    ちなみに返り値データdataがどんな構造をしているかは、
          //    通信したWebサービスの仕様による感じ。
          success: function (data) { 
            $("#videos").empty();
            $.each(data.feed.entry, function(i,item){
              var group = item.media$group;
              $("<a/>")
                .attr("href", group.media$player[0].url)
                .append("<img src='" + group.media$thumbnail[0].url + "'/>")
                .appendTo("#videos");
            });
          }
        });
      }
      $(function(){
        $("#searchButton").click(function() {
          //このsearch関数の中で、検索ボタンクリック時に発生する処理を全て行う。
	  search($("#keyword").val());
          return false;  //formタグ中のボタンなので、submitが発生しないように。
	});
      })
    </script>
  </head>
  <body>
    <form>
      <div id="videos"></div><br/>
      <input id="keyword" type="text" value="検索キーワード" /><br/>
      <input id="searchButton" type="button" value="検索" /><br/>
    </form>
  </body>
</html>