なんとなく.js
jQueryでajax
2015/ 4/ 9 なんとなく.言語
岡本秀高
普通ならここで
自己紹介だけど・・・
内輪だけだし、
いらんよねw
今回のゴール
Ajaxで取得したデータを並べる
• ブラウザ上で簡単にコードを書く方法を知る
• Ajaxで取得したデータをカードっぽく並べる
• オープンデータを使ってみる
「ラ・フォル・ジュルネ びわ湖 2015」に関するオープンデータについて
http://opendata.shiga.jp/lfjb2015/
今日の流れ
• ブラウザ上でコードをテストする
• Ajaxでの通信を試みる
• 取得したデータを表示する
• (jQuery以外でやってみる)
ブラウザ上で
コードを試す
CODEPEN
• ブラウザ上でHTML5のコードを書ける
CODEPEN
• ブラウザ上でHTML5のコードを書ける
• 編集内容をリアルタイムで確認可能
CODEPEN
• ブラウザ上でHTML5のコードを書ける
• 編集内容をリアルタイムで確認可能
• コード公開やクロスブラウザ対応も可能
CODEPEN
• ブラウザ上でHTML5のコードを書ける
• 編集内容をリアルタイムで確認可能
• コード公開やクロスブラウザ対応も可能
• 無料!
ACCESS!
http://bit.ly/1yabhlU
「Save」ボタンが出ればOK
ちょっと
触ってみる
HTMLに文字列を入れると・・・
テキストが表示される
CSSを追加すると・・・
CSSが適用される
今回触るのは「JS」タブ
Ajaxで
通信する
jQueryでの
基本部分
jQueryでAjaxを使う基本
$.ajax({
}).done(function(data) {
}).fail(function(data){
});
jQueryでAjaxを使う基本
$.ajax({
//Ajaxの通信内容
}).done(function(data) {
//Ajaxの通信に成功した時のコード
}).fail(function(data){
//Ajaxの通信に失敗した時のコード
});
とりあえず
動かそう
とりあえず書いてみよう
$.ajax({
url: 'http://lfjb.biwako-hall.or.jp/events-jsonld/',
type:'GET',
dataType: 'json',
timeout:10000,
}).done(function(data) {
$(‘#ajax’).append('OK');
}).fail(function(data) {
$('#ajax').append('fail');
});
OKって出ました?
failが出ました?
なにも出ませんでした?
なんとなく
解説
Ajaxの通信内容を決める(例)
url: 'Ajaxで通信する相手のURL',
type:’通信方法',
dataType: '取得するデータタイプ',
timeout:待機時間,
Ajaxの通信内容を決める(例)
url: 'http://lfjb.biwako-hall.or.jp/events-
jsonld/',
type:'GET',
dataType: 'json',
timeout:10000,
ざっくり意訳すると・・・
1、通信先は「http://lfjb.biwako-hall.or.jp/
events-jsonld/」というURL
2、通信方法はGET
3、JSONのデータを取りに行く
4、10000ミリ秒を越えたら通信中断
doneとfail
通信に成功したらdone、
失敗したらfailの中にあるfunctionが動作する。
doneとfail
通信に成功したらdone、
失敗したらfailの中にあるfunctionが動作する。
function(data)のdata部分に
Ajaxで得たデータが入る
success・error版もある
$.ajax({
//Ajaxの通信内容
}).success(function(data) {
//Ajaxの通信に成功した時のコード
}).error(function(data){
//Ajaxの通信に失敗した時のコード
});
success・error版もある
$.ajax({
//Ajaxの通信内容
}).success(function(data) {
//Ajaxの通信に成功した時のコード
}).error(function(data){
//Ajaxの通信に失敗した時のコード
});
jQuery1.8以上では
使わない!!
そもそも
Ajaxとは?
Ajaxとは(Wikipediaより)
Ajaxは、ウェブブラウザ内で非同期通信とインターフェイスの構築
などを行う技術の総称。
XMLHttpRequest(HTTP通信を行うためのJavaScript組み込み
クラス)による非同期通信を利用し、通信結果に応じてダイナミッ
クHTMLで動的にページの一部を書き換えるというアプローチを取
る。
AjaxはAsynchronous JavaScript + XML の略で、2005年2月18
日に米国のインフォメーションアーキテクトであるJesse James
Garrettにより名付けられた。
なるほど、
わからん
Ajaxとは(Wikipediaより)
Ajaxは、
ウェブブラウザ内で
非同期通信とインターフェイスの構築
などを行う技術の総称。
XMLHttpRequest(HTTP通信を行うためのJavaScript組み込みクラス)による非同期通信を利用し、通
信結果に応じてダイナミックHTMLで動的にページの一部を書き換えるというアプローチを取る。
AjaxはAsynchronous JavaScript + XML の略で、2005年2月18日に米国のインフォメーションアーキテ
クトであるJesse James Garrettにより名付けられた。
リンクを
踏まずに
データを得る
GoogleMapもAjax
昔は地図をずらすのもリンクだった
はじめは
なんとなくで
オK
データを
表示する
Ajaxで取得したJSONは
doneの中で使う
さっきのコードを・・・
$.ajax({
url: 'http://lfjb.biwako-hall.or.jp/events-jsonld/',
type:'GET',
dataType: 'json',
timeout:10000,
}).done(function(data) {
$(‘#ajax’).append('OK');
}).fail(function(data) {
$('#ajax').append('fail');
});
こう書き換えてみよう
$.ajax({
//省略
}).done(function(data) {
for (var i = data.length - 1; i >= 0; i--) {
$('#ajax').append(data[i]["schema:name"]);
}
}).fail(function(data) {
$('#ajax').append('fail');
});
なんか出てきた
コードの意味をざっくりと
for (var i = data.length - 1; i >= 0; i--) {
//dataの長さから、iがゼロになるまで繰り返す
$(‘#ajax’).append(data[i]["schema:name"]);
//dataのi番目にある「schema:name」を表示
}
HTMLタグも書ける
for (var i = data.length - 1; i >= 0; i--) {
var html = “<p>” + data[i][“schema:name”] + “</p>”;
$(‘#ajax').append(html);
}
がっつり書いてみる
var html = "<ul>";
for (var i = data.length - 1; i >= 0; i--) {
html += "<li>" + data[i]["schema:name"] + "</li>";
}
html += "</ul>";
$(‘#ajax').append(html);
お題
こいつを
作る
ヒント
• 必要なCSSはすでに用意されてます
• CSSに合う形でHTMLを作れればOK!
• console.log(data)でJSONをチェック
console.log
console.log(data)
• dataという変数の中身を確認できるコード
• Chromeの開発ツールに表示される
• JSで困ったらとりあえずconsole.log!
お疲れ様
でした
m(_ _)m
おまけ
JSONP
XMLHttpRequest
cannot load
http://domain2.example .
Origin
http://domain1.example
is not allowed by
Access-Control-Allow-Origin.
別ドメインに
Ajax通信は
原則できない
なぜ?
XSS
でも
使いたい
JSONP
これが・・・
{ 'blog' : 'あと味', 'author' : 'jdg' }
こうなる
{ 'blog' : 'あと味', 'author' : 'jdg' }
callback({ 'blog' : 'あと味', 'author' : 'jdg' });
これが・・・
$.ajax({
url: 'http://lfjb.biwako-hall.or.jp/events-jsonld/',
type:'GET',
dataType: 'json',
timeout:10000,
}).done(function(data) {
$(‘#ajax’).append('OK');
}).fail(function(data) {
$('#ajax').append('fail');
});
こうなる
$.ajax({
url: ‘http://lfjb.biwako-hall.or.jp/events-jsonld/?jsonp=?',
type:'GET',
dataType: ‘jsonp', jsonp:’callback’
timeout:10000,
}).done(function(data) {
$(‘#ajax’).append('OK');
}).fail(function(data) {
$('#ajax').append('fail');
});
jQuery
以外のJS
React.js
Facebookが開発したライブラリ
React.js
• コンポーネント単位で再利用しやすい
• Fluxで処理が一方通行だからわかりやすい
• 高パフォーマンスを実現する仮想DOM
Angular.js
Googleが開発したライブラリ
Angular.js
• 非同期で色々できる(双方向データバインド
• ng-appで適用範囲を選べる
• 日本語ドキュメントが多い
Polymer
WebComponents用ポリフィル
Polymer
• WebComponentsを使って構築する
• ComponentsをimportすればだいたいOK
• 簡単なものならほぼNoJavaScript

なんとなくjQueryでAjaxをつかってみる