はじめに
簡単にJSONまたはJSONPを読み込みたい場合は以前の記事を参照。
1分でわかるjQuery $.ajaxによるJSON・JSONP読み込み方法
type
主にGETかPOSTを指定。受け取るときはGET、送信するときはPOST。
url
読み込み先または送信先のURLを指定。例えばJSONを読み込みたいときは以下のようになる。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json' });
cache
キャッシュの有無をtrueかfalseで指定。注意しなければいけないのはJSONの場合はデフォルトでcache:true、JSONPの場合はcache:falseとなっている点だ。つまりJSONをキャッシュをしたくない場合はcache:falseを指定しなければならない。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json', cache: false });
datatype
jsonやjsonpなどのデータ形式を指定。datatypeがないと自動判断される。指定しておくと何のデータ形式かわかりやすいし、間違った形式を自動判断されることがないので追加しておいたほうがよい。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json', cache: false, datatype: 'json' });
data
パラメータを追加する。下記の書き方だと
https://iwb.jp/s/js/data.json?p1=hoge&p2=fugaになる。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json', datatype: 'json', data: { p1: 'hoge', p2: 'fuga' } });
ちなみにdataオプションは一定の間隔のキャッシュクリア対策としても使用される。例えば1日1回だけキャッシュクリアしたい場合はDate関数で作成した日付を語尾につけてhttps://iwb.jp/s/js/data.json?v=20131213のようにする。
var add0 = function(num){ if(num < 10){ num += '0' + num; } return num + ''; }; var now = new Date(); var year = now.getFullYear(); var month = add0(now.getMonth()+1); var date = add0(now.getDate()); var nowYMD = year + month + date; $.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json', datatype: 'json', data: { v: nowYMD } });
$.ajaxのdataオプションをキャッシュ対策に使用したサンプル
jsonpCallback
jsonpのcallback関数を指定。これがないとJSONPは読み込めないので注意。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.jsonp', dataType: 'jsonp', jsonpCallback: 'android', success: function(json){ var len = json.length; for(var i=0; i<len; i++){ $("#b").append(json[i].version + ' ' + json[i].codename + '<br>'); } } });
success
通信が成功したときの処理を記述。第一引数を指定してJSONのデータを取得したりする。
$.eachを併用するとデータを扱いやすい。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/data.json', datatype: 'json', success: function(json){ $.each(json, function(i, item){ $('body').prepend(item.codename + '<br>'); }); } });
error
通信が失敗したときの処理を記述。サンプルではerrorを発生させるために意図的に存在しないURLを指定。
$.ajax({ type: 'GET', url: 'https://iwb.jp/s/js/dataHoge.json', datatype: 'json', success: function(json){ $.each(json, function(i, item){ $('body').prepend(item.codename + '<br>'); }); }, error: function(){ alert('error'); } });
ほかにもオプションが存在するがサイトでよく使用されるのはこれらの8種。
success, errorは使わない
現在はsuccess, errorを使用するのは好ましくないため代わりにthenを使用する。
jQuery $.ajaxによるJSON・JSONP読み込みのサンプル2