質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2086閲覧

Twitterのシェア数をAjaxを利用して非同期で取得

flat

総合スコア617

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/07/24 14:31

編集2015/07/25 07:06

jQueryでは次のコードでTwitterのシェア数を取得出来ますが、これをVanillaに置き換えるとどの様なコードになるのでしょうか…?

JavaScript

1// Twitterのシェア数を取得 2function get_social_count_twitter( url, selecter ) { 3 jQuery.ajax({ 4 url:'//urls.api.twitter.com/1/urls/count.json', 5 dataType:'jsonp', 6 data:{ 7 url:url 8 }, 9 success:function( res ){ 10 jQuery( selecter ).text( res.count || 0 ); 11 }, 12 error:function(){ 13 jQuery( selecter ).text( '0' ); 14 } 15 }); 16}

追記
回答を頂く前に自己解決してしまったので、そのコードも一応記載しておきます。

JavaScript

1function insert_script( url ) { 2 // script 要素を生成 3 var script = document.createElement( 'script' ); 4 // スクリプトのソースを指定 5 script.src = url; 6 // 非同期読み込みを有効にする 7 script.async = true; 8 // body タグにノードを追加 9 document.body.appendChild( script ); 10} 11 12// Twitterのシェア数を取得 13function get_social_count_twitter( url, selector ) { 14 // url をエンコード 15 var url = encodeURIComponent( url ); 16 // コールバックを生成(キャッシュ対策としてUTCに変換した現在時刻を付加) 17 var callback = 'jsonp_twitter_' + ( new Date ).getTime(); 18 // script 要素に指定するURL 19 url = '//urls.api.twitter.com/1/urls/count.json?url=' + url + '&callback=' + callback; 20 // script 要素を追加 21 insert_script( url ); 22 // シェア数を表示する要素 23 var selector = document.querySelector( selector ); 24 25 // 返り値(JSONP)を利用した処理を実行 26 window[callback] = function( res ) { 27 // シェア数を表示するためのテキストノードを生成 28 var count = document.createTextNode( res.count ); 29 // selector にテキストノードを追加 30 selector.appendChild( count ); 31 }; 32}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JSONPということで、<script>要素を自動生成して動かすことになります。

lang

1function get_social_count_twitter( url, element) { 2 //一意なコールバックの生成 3 var callback_name = 'callback_' + (new Date).getTime(); 4 window[callback_name] = function(res){ 5 element.innerHTML = res.count || '0'; 6 } 7 //これを呼び出すJSONPの生成 8 var script = document.createElement('script'); 9 script.src = 10 '//urls.api.twitter.com/1/urls/count.json?callback=' + 11 callback_name + '&url=' + encodeURIComponent(url); 12 document.body.appendChild(script); 13 //読み込んだscript経由でコールバックを実行 14}

なお、もとのjQueryでもこのプレーンJS版でも、(jQueryでタイムアウトを入れた場合を除いて)エラー時の処理は実行されません。

投稿2015/07/25 05:18

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flat

2015/07/25 06:51

回答して下さりありがとうございます。 実は自己解決してしまったのですが、自己解決した方法と提示して頂いたコードがほぼ同じ内容だったのでほっとしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問