• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JSONPを処理するにはどうすればいいですか?)

JSONPを処理する方法とオブジェクト指向についての質問

このQ&Aのポイント
  • JSONPを処理する方法とオブジェクト指向についての質問です。
  • 質問者は、あるページのサンプルスクリプトを利用してJSONPデータを処理しようとしていますが、エラーが起こってしまいます。
  • オブジェクト指向に関する知識が足りず、解決策が分からないため、助言を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

恐らく関数を入れ子にしているせいだと思います(getjsonp関数の中でhandler関数が定義されている)。関数内で定義されたhandler関数は、グローバルスコープから参照できないはずです。 handler関数を、getjsonp関数の外に出してやったらどうでしょう?

enta_2006
質問者

お礼

おっしゃられたとおりに中からだしたらあっさりいきました。 教えていただき有り難うございました。 本当に助かりました!感謝です!:) getjsonp(url); function getjsonp(url){ var oJsr = new JSONscriptRequest(url); oJsr.buildScriptTag(); oJsr.addScriptTag(); oJsr.removeScriptTag(); } function hundler(data) { var ul = document.createElement('ul'); for (var i=0, post; post = data[i]; i++) { var li = document.createElement('li'); var a = document.createElement('a'); a.setAttribute('href', post.u); a.appendChild(document.createTextNode(post.d)); li.appendChild(a); ul.appendChild(li); } document.getElementById('bookmark').appendChild(ul); }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スクリプトで<div id="links">

    下記スクリプトで<div id="links"></div>のところを 開いた瞬間 <ul> <li><a href="http://foo.com/">foo</a></li> <li><a href="http://bar.com/">bar</a></li> </ul> に変換したいのですがうまくいきません どこをどのように変更すれば変換されるのでしょうか 【スクリプト】 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript"> var URL = new Array("http://foo.com/","http://bar.co.jp/"); var TITLE = new Array("foo","bar"); // 表示用コンテナ var container = document.getElementById('links'); // リセット container.innerHTML=''; var ul=document.createElement('ul'); container.appendChild(ul); for(var i=0;i<URL.length;i++){ var li=document.createElement('li'); var a=document.createElement('a'); // 'href'属性の設定 a.setAttribute('href',URL[i]); // ラベル a.appendChild(document.createTextNode(TITLE[i])); li.appendChild(a); ul.appendChild(li); } </script> </head> <body> <div id="links"></div> </body> </html>

  • scriptリンクの別画面表示

    はじめまして。 ホームページのトップにブログの件名をニュースとして一覧表示したくて Google AJAX Feed API を利用しました。 表示自体はうまくいったのですが、 この記事へのリンクを別ウィンドウで開くようにするにはどうすればいいのでしょうか? 当方、JavaScriptは全く分からずで困っております・・・ おわかりの方、いらっしゃいましたらよろしくお願いいたします。 【html header 部分】 <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://blog.XXXXX.XXX"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var li = document.createElement("li"); var a = document.createElement("a"); a.href = entry.link ;       var date = new Date(entry.publishedDate); var titlelink = entry.title; a.appendChild(document.createTextNode( "・" + date.toDateString() + " " +titlelink)); li.appendChild(a); container.appendChild(li); } } }); } google.setOnLoadCallback(initialize); </script> 【html body 部分】 <div id="feed"></div> 以上、どうぞよろしくお願いいたします。

  • JSONPでのおかしな挙動

    最近Ajaxの勉強を始めたものです。 クロスドメインでの通信を行うため、レンタルサーバー2個(ドメイン2個) の環境で、JSONPを使って下記のようなコードを記述したところ、無事に 動作が確認できました。 ●HTML(ドメイン1) <html> <head> <title>JSONPテスト</title> <script type="text/javascript"> function callback(data) { contents = "姓: " + data.sei + " 名: " + data.mei; alert(document.getElementById('here').innerHTML); //初期値です document.getElementById('here').innerHTML = contents; } var url = "ドメイン2のURL/callback.js"; var script = document.createElement('script'); script.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(script); </script> </head> <body> <div id="here">初期値です</div> </body> </html> ●callback.js(ドメイン2) callback({"sei": "山田", "mei": "太郎"}); ところが、上記のドメイン1の代わりにブログを使い、ドメイン2 としてレンタルサーバーでテストしたところ、 document.getElementById("here") is null というエラーが出てしまいます。 ブログとしては、SeesaaとFC2を利用したところ、どちらもNGでした。 alertで変数をチェックしたところ、本来「初期値です」というテキスト が表示されるはずのところが、nullになっており、どうも該当タグが DOMで認識されていないようです。 一方で、同じく無料ブログにおいて、単純に、 <script type="text/javascript"> alert(document.getElementById('here').innerHTML); //初期値です </script> のみを実行すると、こちらはうまくいくのです。 関数での変数のスコープの問題かとも思いますが、どうにも理解でき なくて困っています。 アドバイスをよろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • Google AJAX Feed API

    Google AJAX Feed APIでRSSを読み込んでタイトルなどの文字のみの表示をすることはできたのですが、(下の記述でやっています。) 画像が投稿されているブログ記事の画像を読み込み、表示させることはできるのでしょうか? その場合の方法はどのように、すればできるのでしょうか? お手数をおかけしますが、よろしくお願い致します。 <script type="text/javascript" src="http://www.google.com/jsapi?key="></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://");  <!--表示したいエントリー数--> feed.setNumEntries(10); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("li"); var a = document.createElement("a");a.href = entry.link;  <!--別窓で表示しない場合は削除してください--> a.target = "_blank" ; a.appendChild(document.createTextNode(entry.title)); div.appendChild(a); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script>

  • javascriptとCSSを使ってのドロップダウンメニュー作成

    CSSとJavaScriptを使って ドロップダウンメニューを作ろうと思っているのですが JavaScriptがうまく作動していないためか FireFoxでは表示されるのですが IE6では動きません。 ご教授お願い致します。 ■index.html <head> <script src="javascript/menu.js" type="text/javascript"></script> </head> <div id="nav"> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> </div> ■menu.js function menuHover() {var menuItems = d.getElementById("nav").getElementsByTagName("li"); for (var i = 0, miL = menuItems.length; i < miL; i++) { menuItems[i].onmouseover = function() { this.className = "mnhover"; } menuItems[i].onmouseout = function() { this.className = ""; } window.onload = menuHover();

  • JavaScriptで表示文字数を制御したい

    Google Feed APIを使い、JavaScriptで自分のホームページにRSSのニュースを表示しています。 文字の大きさ と 行間 は、以下のような <style type="text/css"> #feed { font-size:16px; } #feed li { height: 4em; } </style> のcssを書くことによって調整できましたが、現在の状態だと全部のニュースを表示してしまうので 表示する文字数を「先頭から40文字」までにしたいのですが、 そのやり方が分かりません。 具体的に、どうすればよいのか、ご教示いただければと思っています。 大変困っているので、何卒よろしくお願い致します。 以下、参考までにjavascriptも載せておきます。 <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { //RSSフィードの取得 var feed = new google.feeds.Feed("RSSフィードのアドレス"); //表示したいエントリー数 feed.setNumEntries(4); //実際に読む込む feed.load(function(result) { //読み込めたか判別 if (!result.error) { //表示部分を選択 var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("li"); var a = document.createElement("a");a.href = entry.link; a.target = "_blank" ; //日付を取得 var date = new Date(entry.publishedDate); var yearNum = date.getYear(); if (yearNum < 2000) yearNum += 1900; a.appendChild(document.createTextNode(entry.title)); //タイトルと日付の行を変える a.appendChild( document.createElement( "br" ) ); //a.appendChild(document.createTextNode(" (" + date.toLocaleDateString() + ")" )); //↑chromeで年月日が表示されない a.appendChild(document.createTextNode("(" + yearNum + "年" + (date.getMonth()+1)+"月"+date.getDate()+"日"+")" )); div.appendChild(a); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script>

  • for(var i=0;...) の i の値を保持するには?

    ----- <ul> <li>test1</li> <li>test2</li> <li>test3</li> </ul> <script type='text/javascript'> (function(){ var li = document.getElementsByTagName('li'); for(var i=0,max=li.length; i<max; i++){ li[i].onclick = function(){ alert(i); }; } })(); </script> ----- 上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。 0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか? 現在作成しているスクリプトでは、下記のようにidに値を保持しています。 もう少しスマートな方法がある気がするのですが…。 --- li[i].id = 'test' + i; li[i].onclick = function(){ alert(this.id.replace(/^test(\d+)/, '$1')); }; ---

  • cookie を利用して 別ページへ移動前に見ていたタブに戻す方法

    http://oshiete1.goo.ne.jp/qa5275862.html の質問に関連して、こちらももしどなた様かお教え頂けますなら、コメントを頂けますと大変嬉しいです。 宜しくお願い申し上げます。 ↑ 引用の【別ページへのURL移動なく、タブを切り替えて各対応する div 内の表示を切り替えるUI】につき、 該当部分を簡単に引用すると、以下のような原始的な javascript で書いています。 -------------------------------------------- window.onload = function(){ createTab(); showCategory('menu1'); setTabClick('menu1Nav','menu1'); setTabClick('menu2Nav','menu2'); setTabClick('menu3Nav','menu3'); setTabClick('menu4Nav','menu4'); setTabClick('menu5Nav','menu5'); preloadImages( ~ ); }; function hide(elementId) { document.getElementById(elementId).style.display = "none"; } function show(elementId) { document.getElementById(elementId).style.display = "block"; } function showCategory(categoryName){ hide('menu1'); hide('menu2'); hide('menu3'); hide('menu4'); hide('menu5'); show(categoryName); changeTab(categoryName); } function createTab() { var tab_wrap = document.getElementById("tab_wrap"); var tab_conts = document.getElementById("tab_conts"); var nav = document.createElement("ul"); nav.setAttribute('id','nav'); nav.appendChild(createListItem('menu1Nav','#menu1','メニュー1')); nav.appendChild(createListItem('menu2Nav','#menu2','メニュー2')); nav.appendChild(createListItem('menu3Nav','#menu3','メニュー3')); nav.appendChild(createListItem('menu4Nav','#menu4','メニュー4')); nav.appendChild(createListItem('menu5Nav','#menu5','メニュー5')); tab_wrap.insertBefore(nav,tab_conts); } function createListItem(id,href,text) { var li = document.createElement("li"); var a = document.createElement("a"); var t = document.createTextNode(text); li.setAttribute('id',id); a.setAttribute('href',href); a.appendChild(t); li.appendChild(a); return li; } function setTabClick(listName,categoryName) { var e = document.getElementById(listName).getElementsByTagName('a')[0]; e.onclick = function(){ showCategory(categoryName); return false; }; e.onfocus=function(){this.blur();} } function changeTab(categoryName){ var e = document.getElementById('nav'); e.className = categoryName; } --------------------------------------------------------------- この最初の window.onload = function(){ ~ で showCategory('menu1'); と、最初に表示されるタブ(& 該当 div)を固定で指定しているので、 特定タブに切り替えて、該当する内部の div 内のリンクなどから別ページに移動した後に【最初のタブのあるページ】に戻っても(history.back(); リンクからでもOK)、毎回「最初の menu1 のタブ & 該当 div」が表示されることになります。 この最初の window.onload を、この js 内に セット・ゲットcookie などを使って、現在の Yahoo JAPAN! のTOP上部タブのように、 【★ 別ページに移動した後に前ページへ戻ったら、最後に自分が見ていたタブが開いている状態で戻れる】 ようにできるとすれば、どのような記述をすれば良いでしょうか? サーバーサイドスクリプトではなく、cookie 利用で js でできれば良いのですが。 javascript 不勉強者には cookie コントロールは難しいかもしれませんが、例示でなく【具体的な記述方法】でご教授頂けますと大変幸いです。 ぐぐって調べましたが、適当なサンプルがどうしても見つからず、 ご理解の深い皆様の教えを頂けますと大変ありがたく。 何卒宜しくお願い申し上げます。

  • オブジェクトがありませんのエラー

    過去ログを呼んで近いのがあったのでよく読んだのですが よくわかりませんので書き込みします。 以下のスクリプトで「オブジェクトがありませんのエラーが発生します。3行目のfor文の「obj.childNodes」でエラーが発生します。 「document.getElementById」が「null」であるのが原因のようですが、なぜ「document.getElementById」に値が入らないのかがつかめません。 お手数ですがよろしくお願いします 【script】 --------------------------------------------- if(document.getElementById && document.all && !navigator.userAgent.match(/Opera/)){ var obj = document.getElementById("mainmenu"); for(var i=0;i<obj.childNodes.length;i++){ if(obj.childNodes[i].className=="pullmenu"){ obj.childNodes[i].onmouseover = function(){pull(this) }; obj.childNodes[i].onmouseout = function(){pull(this) }; } } } --------------------------------------------- 【html】 --------------------------------------------- <ul id="mainmenu"> <li id="Begginer" class="pullmenu"><a href="http://www.○○○.co.jp/b/w.php">○○○</a> <ul> <li><a href="http://www.○○○.co.jp/b/w.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/s.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/m.php">○○○ </a></li> </ul> </li> </ul>

  • GoogleMapsで<UL>タグとの連携

    http://bit.ly/7Gt3Cp のサンプルのように,キャンバスの右側(デモは左側になっておりますが)に<UL>タグのリストを配置して,それぞれのリンクをクリックすると,該当するマーカーがマップの中央にくるようにPantoで移動するようにしたいと思います. サンプルのコードは,ランダムマーカーだったのと,コードの書き方がすこし特殊な感じで(最初にvar Demoを宣言し,その中にすべての処理を書き込んでいく方法?)あまり参考にできなかったので,別のサンプルを参考にして,JSON形式のデータを取り込むコードを書きました. <html lang="ja"> <head> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=ja"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> $(function(){ // JSON読み込み $.ajax({ url:"students.js", cache:false, dataType:"json", success:function(json){ var data=jsonRequest(json); initialize(data); } }); }); function jsonRequest(json){ var data=[]; //データ全体のラベルはstudentsで,各データは”branch","name","age","lat","lng"などのラベルを持っています if(json.students){ var n=json.students.length; for(var i=0;i<n;i++){ data.push(json.students[i]); } } return data; } function initialize( data ){ var op={ zoom:12, center:new google.maps.LatLng(34.7417512 , 135.3269878 ), mapTypeId:google.maps.MapTypeId.ROADMAP }; var map=new google.maps.Map(document.getElementById("map_canvas"),op); var i=data.length; while(i-- >0){ var dat=data[i]; var obj={ position:new google.maps.LatLng(dat.lat,dat.lng), map:map, title:dat.name }; var marker=new google.maps.Marker(obj); } } </script> </head> <body> <div id="map_canvas" style="width:100%;height:100%"></div> </body> </html> このコードをベースにしていきたいのですが,どこをどうすれば良いのか見当がつきません. // Generate list elements for each marker. var li = document.createElement('li'); var aSel = document.createElement('a'); aSel.href = 'javascript:void(0);'; aSel.innerHTML = 'Open Marker #' + n; aSel.onclick = Demo.generateTriggerCallback(marker, 'click'); li.appendChild(aSel); ul.appendChild(li); 上記はリンク先145行目~152行目です.この部分が当該の機能であることは何となく分かるのですが,必要なオブジェクトの生成や,コールバックの意味あいといったところが分からなくて,どのように書いていけばいいのか分からないで困っています. なにかアドバイスをいただけたらと思いますので,よろしくお願いいたします。