ピュアなJSでAPIリクエストをするメモ(jsonとjsonp)
この記事は、2016年01月06日にQiitaで投稿した以下の記事を転記したものです。
ピュアなJSでAPIリクエストをするメモ(jsonとjsonp) https://qiita.com/ikuwow/items/ed5f3c9ee0bd6147b7f3
いつも忘れるので、メモ。
フロントエンドJavaScriptからAPIを叩いてレスポンスを受け取って、コールバックを呼び出すまで。
JSONのデータをリクエスト
(function(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (this.readyState==4 && this.status==200) {
// responseをhogehogeする
}
};
xhr.responseType = 'json';
xhr.open('GET',endpoint,true);
xhr.send();
})();
毎回書くのは面倒なので、簡単でよいなら以下の様な関数を作ったりしている。
(function(){
var requestAjax = function(endpoint, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (this.readyState==4 && this.status==200) {
callback(this.response);
}
};
xhr.responseType = 'json';
xhr.open('GET',endpoint,true);
xhr.send();
};
})();
requestAjax("http://example.com/endpoint1", function(response){
// responseをhogehogeする
});
requestAjax("http://example.com/endpoint2", function(response){
// responseをhogehogeする
});
JSONP
APIがCORSに対応していない場合はJSONPのオプションが用意されていたりします。
JSONPの場合scriptタグからリクエストします。
(InstagramのAPIを触った時のコードをそのまま入れます)
(function(){
var script = document.createElement('script');
script.src = 'https://api.instagram.com/v1/users/5001435/media/recent/?access_token='+accessToken+'&callback=instaCallback';
window.instaCallbackFavorites = function(response) {
// reponseをhogehogeする
};
document.body.appendChild(script);
})();
(ちなみにアクセストークンをフロントに渡してしまうのは危険なので推奨しません)