• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:楽天APIのデータをjqueryのgetJSONで呼び出して、その呼び)

jqueryを使った楽天APIデータのカルーセル表示方法

このQ&Aのポイント
  • 楽天APIのデータをjqueryのgetJSONで呼び出し、jcarouselliteを使ってカルーセルで表示する方法を教えてください。
  • 楽天APIのデータを取得してカルーセル表示する際、正しく表示されない問題が発生しています。適切な方法を教えてください。
  • 楽天APIのデータをjqueryを用いてカルーセルで表示する方法について教えてください。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

楽天のJSONをダウンロードして、自サイトに置いた上でNo1のコードで 実験したら、jcarouselliteもうまくいきました。 ご提示の、 $(".carousel ul").append("<li><a href='" + url + "'><img src='" + img + "'><span>"+ price + "円</span></a><li>"); は $(".carousel ul").append("<li><a href='" + url + "'><img src='" + img + "'><span>"+ price + "円</span></a></li>"); ですね。最後の</li>がないと、jcarouselliteはうまくいきません。 後は、PROXYとなるPHPとかを別途作って、そいつに向かって、 エンコードした楽天へのリクエストULIをGETするURLを $.getJSON()で呼んでやれば、そのまま出来ます。

oiwai-giftland
質問者

お礼

>>楽天のJSONをダウンロードして、自サイトに置いた上でNo1のコードで 実験したら、jcarouselliteもうまくいきました。 わざわざ、テストまでしていただきまして、本当にありがとうございます!!! 申し訳ない限りです~。 >>$(".carousel ul").append("<li><a href='" + url + "'><img src='" + img + "'><span>"+ price + "円</span></a><li>"); は $(".carousel ul").append("<li><a href='" + url + "'><img src='" + img + "'><span>"+ price + "円</span></a></li>"); ですね。最後の</li>がないと、jcarouselliteはうまくいきません。 これは、初歩も初歩のミスですね・・・。 すごい恥ずかしいです。 >>後は、PROXYとなるPHPとかを別途作って、そいつに向かって、 エンコードした楽天へのリクエストULIをGETするURLを $.getJSON()で呼んでやれば、そのまま出来ます。 ありがとうございました!! いつも、いただくご助言で、本当に助かっております。

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

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

サーバーにアップロードしたところ、全く動作をしてくれませんでした。 =>それって、クロスドメインアクセスじゃないですか? JSONじゃなくてJSONPになってないと取得できないですよ。 「楽天API」はよく知らないんですけど、JSONの他にJSONPを返してくれる パラメーターとか無いんですか? よそのサイトからJSONを取り込むには、どうしてもサーバーサイドのプログラム が必用ですよ。たとえjQueryといえども。 (※JSONPならjQueryだけで出来ます。) ・JSONPというのは、しごく大雑把に説明すると <script>タグが外部サイトのソースを取り込めるのを利用して、  <script src="リクエストURL"></script> のタグを動的に生成して、中身に  callback_func({JSONデータ}); がセットされるという物です。jQuery使うとcallback_funcの名前を 気にせず、$ajax()内の匿名functionでjsonにアクセス出来るという 仕組みです。

oiwai-giftland
質問者

お礼

サーバーにアップロードしたところ、全く動作をしてくれませんでした。 >>=>それって、クロスドメインアクセスじゃないですか? なるほど!なるほどです。 まだまだ全然理解せずに使っていますが、何とか、サーバー上でも 動くようになってくれました!! 毎度、本当にありがとうございます。 >> JSONじゃなくてJSONPになってないと取得できないですよ。 >> 「楽天API」はよく知らないんですけど、JSONの他にJSONPを返してくれる >> パラメーターとか無いんですか? >> よそのサイトからJSONを取り込むには、どうしてもサーバーサイドのプログラム >> が必用ですよ。たとえjQueryといえども。 >> (※JSONPならjQueryだけで出来ます。) >> >> ・JSONPというのは、しごく大雑把に説明すると >> <script>タグが外部サイトのソースを取り込めるのを利用して、 >>  <script src="リクエストURL"></script> >> のタグを動的に生成して、中身に >>  callback_func({JSONデータ}); >> がセットされるという物です。jQuery使うとcallback_funcの名前を >> 気にせず、$ajax()内の匿名functionでjsonにアクセス出来るという >> 仕組みです。 ここら辺の事をちゃんと理解して使っていけるように頑張りたいと思います。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

検証してませんが、おそらく$.getJSON()は非同期で実行されてる はずですから、コールバック関数が実行されるより前に$().jCarouselLite が実行されてんではないでしょうか。 $().jCarouselLiteもコールバック関数の中に入れてみてはどうでしょう

oiwai-giftland
質問者

お礼

早速の回答、いつも、誠にありがとうございます。 >>$().jCarouselLiteもコールバック関数の中に入れてみてはどうでしょう についてですが、具体的にどの様に記述すると上手くいきますか、お教え願えますでしょうか。 ちなみに、 $.getJSON( "http://api.rakuten.co.jp/rws/3.0/json?developerId=a85598e3698a4fec0b48db3036df0c6e&operation=ItemSearch&version=2009-04-15&keyword=%E3%80%90%E5%BE%A1%E4%B8%AD%E5%85%832010%E5%A4%8F%E3%80%91", function(data, status) { var items = data.Body.ItemSearch.Items.Item; $.each(items,function(i){ var img = items[i].mediumImageUrl; var price = items[i].itemPrice; var url = items[i].itemUrl; var name = items[i].itemName; $(".carousel ul").append("<li><a href='" + url + "'><img src='" + img + "'><span>"+ price + "円</span></a><li>"); }); $(".carousel").jCarouselLite({ btnNext: ".next", btnPrev: ".prev" }); } ); として、コールバック関数の中に入れてみた所、ローカルでは上手く動くのですが、 サーバーにアップロードしたところ、全く動作をしてくれませんでした。 これは、以前にご指導いただきましたツールチップの時の様に、$().jCarouselLiteを 読み込むタイミングが悪いのでしょうか。 お手数をお掛けしますが、何卒宜しくお願いいたします。 失礼します。

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

関連するQ&A

  • 画像が表示されない。

    質問させてもらいます。 jqueryのjCarouselLiteを使ってメニューを作りました。 その際、メニューをクリック等するとコンテンツが表示されるようにしようと思っているのですが、 初期状態を非表示にしたく、コンテンツ部分(AAA)を{ display: none; }にしました。 それでメニュークリックして表示させるまでは良いのですが、 AAAの中身(こちらにもjCarouselLiteのスライドを使用しています)の画像だけが表示されないのです。 jCarouselLiteを使用せず、普通に画像やテキストのみを置いた場合は問題なく動作します。 また、{ display: none; }を入れない場合も(見栄えの問題があるものの)問題なく動作します。 【メニュー部分】 <div class="carousel"> <div class="jCarouselLite"> <ul> <li><a href=""onClick="document.getElementById('AAA').style.display = 'inline';" /> <img src="img/1.jpg" /></a></li> </ul> </div> </div> 【コンテンツ部分】 <div id="AAA"> <div class="carousel2"> <a href="#" class="prev2"><img src="img/left.png" border="0" /></a> <a href="#" class="next2"><img src="img/right.png" border="0" /></a> <div class="jCarouselLite2"> <ul> <li><img src="img/001.jpg" /></li> <li><img src="img/002.jpg" /></li> <li><img src="img/003.jpg" /></li> </ul> </div> </div> </div> 上記のleft.pngなどは表示されるのですが、img/001.jpgなどが表示されません。 <div id="AAA"></div>内<div class="carousel2"></div>内に001.jpgを置いた場合は普通に表示されます。 問題の発生するjCarouselLite2のCSSは以下のとおりです。 .jCarouselLite2 { margin: 5px auto 0px; width: 560px; } .jCarouselLite2 li img, .jCarouselLite2 li p { background-color: #fff; width:500px; height: 333px; margin: 5px; } 説明不足もあるかも知れませんが、ご指摘いただけると幸いです。

    • ベストアンサー
    • CSS
  • jQueryでデータを受け渡しで動作が・・・。

    jQueryでデータを受け渡しで動作がどうしてもうまくいきません。 <li>タグにjsonデータを呼び出して表示しています。 それで別の処理のデータを加えるとどうしても最大6行表示の方が機能しなくなってしまいどうしたらうごくのでしょうか? 普通においただけではダメなのでしょうか? <script type="text/javascript"> jQuery(function(){ $.getJSON("./json_sql.php",function(data){ $.each(data,function(i,items){ $("<li/>",{ text : items.category+' '+ items.date+' '+items.content, 'class' : items.category, }).appendTo('ul','#portfolio'); }); }); }); $(document).ready(function() { var max = 6 /* 最大表示数 */ var mx = ':lt(' + max + ')', pf = $('#portfolio li'); pf.filter(':not(' + mx + ')').hide(); $('#navi a').click(function(){ var filterVal = '.' + $(this).text().toLowerCase().replace(' ', '-'); if(filterVal=='.all') filterVal = '*'; pf.filter(':visible').fadeOut('fast', function(){ pf.filter(filterVal + mx).fadeIn('slow'); }); }); }); </script> <div id="main"> <ul id="navi" class="tab"> <li class="all"><a href="#" onclick="document.getElementById('samplebox').style.backgroundColor = '#e2260d';">ALL</a></li> <li class="topix"><a href="#" onclick="document.getElementById('samplebox').style.backgroundColor = '#0f639f';">topix</a></li> <li class="cleaning"><a href="#" onclick="document.getElementById('samplebox').style.backgroundColor = '#0e99b0';">cleaning</a></li> <li class="insurance"><a href="#" onclick="document.getElementById('samplebox').style.backgroundColor = '#0ea653';">insurance</a></li> </ul> <div id="samplebox"></div> <div class="content"> <ul id="portfolio"></ul> </div> <!--/ .main--> </div>

  • jQueryで画像を表示しようとすると表示しない

    textに画像を指定したのですが、そのままタグが表示されてしまい画像が表示されません。 色々いじってみたものの表示されなかったりして、どうしたらいいのかわかりません。 よろしくお願い致します。 <script type="text/javascript"> jQuery(function(){ var nCnt = 1; var nMax = 6; $.getJSON("./json_sql.php",function(data){ $.each(data,function(i,items){ if(nCnt <= nMax) { $("<li/>",{ text : '<img src="images/test.jpg" width="68" height="14">'+items.category+' '+items.date+' '+items.content, 'class' : items.category, }).appendTo('#portfolio'); } nCnt++; }); }); }); </script>

  • jQueryでタブ、スライダーを使う際の質問です

    こんにちは。WEBデザインを勉強している者です。 本やネットを見ながらWEBデザインの勉強をしていますが、まだわかっていない事が多く、どなたかお答えして頂けたら大変有り難いです。 jQueryを使って、タブ(2つ)の中にそれぞれ写真を動かすスライダーを作ったのですが、 2つめのタブのスライダーが、写真が終わっても空白のページにどこまでも進んでしまいます。 ページネーションの数も、写真の数以上に表示されていて、何ページ目かわかるように 色が濃くなるはずが、何も変わりません。 ひとつめのタブも、ページネーションが一個飛ばしで表示されてしまいます。 初心者なのに、難しい作りにしたのがまずかったのかと反省しましたが、こういった 作りは不可能なのでしょうか?似た質問を見て、$をjQueryに変えるものや、いろいろ試しましたがチンプンカンプンで全くできませんでした。涙 両方のスライダーを動かそうと思って、 <div id="carousel">と<ul id="carousel_base">のidをclassに変えてしまったのですがそれが原因でしょうか.. もしおわかりになる方がいらっしゃったら、助けて頂きたいです。 スライダーはhttp://black-flag.net/jquery/20110708-3310.htmlここのコードをそのまま使いました。 2つとも動かす為に、$('#carousel')などの#部分を全てクラス$('.carousel')に変えてしまいました。javascriptの方も#から.に変えました。 ですが2つのスライダーがまとめて動いてしまっているような感じもします。 よくわからない質問で申し訳ありません。 下にあるコード部分がもうひとつあって、<div id="tab-2">にしているという感じです。 <div id="tab-1"> <div class="carousel"><!-------------carousel start-----------------------> ↑ここはもともとidでした <ul class="carousel_base"><!-------carsousel_base start------->   ↑ここはもともとidでした <li> <ul> <li><img src="#" /></li> </ul> </li> <li> <ul> <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li>  <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li> </ul> </li> <li> <ul> <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li> <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li> </ul> </li> <li> <ul> <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li> <li><a href="#" rel="lightbox[roadtrip]"><img src="#" /></a></li> </ul> </li> <li> <ul> <li><img src="#" /></a></li> </ul> </li> </ul><!-------carsousel_base end--------> </div><!-----------------------carousel end-----------------------------> </div><!--tab-1 end-->

  • jCarouselLiteループ時の属性値取得

    jCarouselLiteプラグインにてカルーセルパネルをカスタマイズしています。 IE9/Safari5/FireFox12でテストしています。 jquery-1.7.2.min.js jcarousellite_1.0.1.js 独自スクリプトでクリックされたときの<a>のhref属性値を取得できるかアラート表示させて確認してみると <ul></ul>に囲まれた分5つの1ループ目はそれぞれ取得できるのですが、2ループ目以降の<a>のhref属性が取得できません。 現在、無限ループするように設定し、それはできています。 =======独自スクリプト========== $(function() { $("#carousel .anyClass a").click(function(){   alert($(this).attr("href"));//←2周目のhref属性が取得できない }); }); ============================ =======htmlソース=========== <div id="carousel"> <div class="anyClass"> <ul> <li><a href="img/photo1.jpg"><img src="img/photo1_thum.jpg" alt="" class="01" /></a></li> <li><a href="img/photo2.jpg"><img src="img/photo2_thum.jpg" alt="" class="02" /></a></li> <li><a href="img/photo3.jpg"><img src="img/photo3_thum.jpg" alt="" class="03"/></a></li> <li><a href="img/photo4.jpg"><img src="img/photo4_thum.jpg" alt="" class="04"/></a></li> <li><a href="img/photo5.jpg"><img src="img/photo5_thum.jpg" alt="" class="05"/></a></li> </ul> </div> </div> ============================ お手数ですがご教授ください。お願いします。

  • jQueryでリストを分割してページ送りを表示

    現在、以下の内容でリストを分割してページ送りで切り替えられる様にしています。 [jQuery] $(function() { var item = $('#list li').length; var i = 0; while (i < item){ var group = i * 10; var num = group + 10; for (var j = group; j < num; j++) { $('#list li').eq(j).addClass('num'+(i+1)); } i++; } /* Pagenation */ $('#list').after('<ul id="nav"></ul>') var lastrep = $('#list li:last').attr('class').replace(/no/i,''); var lists = ""; for (var i = 0; i < lastrep; i++) { lists += '<li class="page-count">'+( i+1 )+'</li>\n'; } $("nav").append(lists); /* First View */ $('#list li').hide(); $('#list .no1').show(); $('#nav li').eq(0).addClass('current'); /* Click */ $('#nav li').click(function () { var items = $(this).parent().children().index(this); var setitems = items +1; $('#list li').hide(); $('#list .no'+setitems).show(); $('#nav li').removeClass('current'); $(this).addClass('current'); }); }); [html] <ul id="nav"> <li class="page-count current">1</li> <li class="page-count">2</li> <li class="page-count">3</li> <li class="page-count">4</li> </ul> <ul id="list"> <li class="no1">item</li> <li class="no1">item</li> ... <li class="no4">item</li> </ul> このページネーションの部分を次の様にするにはどうしたら良いでしょうか…? [html] <ul id="nav"> <li class="page-count">Prev</li> <li class="page-count">Next</li> </ul> <div class="count"><span class="now">1</span>/<span class="total">4</span></div>

  • jQuery - bind('click', x)

    <!DOCTYPE html> <script src="jquery-1.7.1.js"></script> <style> .menu_items { display: none; } </style> <script> $(function() { $('.dropdown').each(function () { var menu = $(this).parent().children('.menu_items'); var hideFunc = function() { menu.slideUp(120); $(document).unbind('click', hideFunc); }; $(this).click(function() { menu.slideDown(120); $(document).bind('click', hideFunc); }); }); }); </script> <div> <button class="dropdown">Currency</button> <ul class="menu_items"> <li><button>USD</button> <li><button>EUR</button> <li><button>GBP</button> </ul> </div> -- jquery でメニューに表示・非表示をしたいと思ってます。 click したあとに、メニューを消す命令を bind してるってのに、 この hideFunc (メニューを消す命令) がすぐ呼ばれてしまいます。 適当な配列をフラグに使って二回目呼ばれたときには消す、みたいな解決策を思い来ましたが、 いまいちスマートな感じがしません。 ちゃんとクリックが終わったあとに hideFunc をバインドしたいのですが、それはなにかいい書き方あれば教えてください

  • getJsonを利用してinvalid label

    jQuery1.50です。 var aId={aa:'002',bb:'005',cc:'014'}; var key=0; var apiKey="http://~~?callback=?&result=2&f_id="; $(function(){$.each(aId,function(key,val){ var jsonUrl=apiKey+aId[key]; $.getJSON(jsonUrl,function(data){ $("#rArea .block .iink").before('<h3><img src="img/home/report_'+key+'_title.gif" width="400" height="10" /></h3><dl id="repo'+aId[key]+'">'); $.each(data.entries,function(i,items){ $("#repo"+aId[key]).append('<dt><img src="'+this.image_url+'" width="85" height="50" /></dt><dd><p class="reportTtl"><a href="'+this.url+'" target="_blank">'+this.title+'</a></p><p class="date">'+this.pubdate+'</p></dd>'); });});});}); 上記を実行したところ、invalid labelエラーが発生しました。 evalでかこめ、という対処は調べてわかったのですが、 var jsonUrl=eval("("+apiKey+aId[key]+")");だとか、試したのですが、今度はシンタックスエラーを起こして直りません。(上記の場合、「missing ) in parenthetical」) どこを修正したらいいのか分からなくなってしまったのでご教授頂ければ幸いです。

  • jqueryの質問です

    jqueryで .tes01と.tes02は同じ番目をセットと考え .tes01 の画像をクリックした時に .tes02のリンクをクリックした状態にしたいと思っています。 .tes02のURLの取得は出来たのですがそれ以降が出来ないので教えてもらえますでしょうか。 $(function(){ $("ul.tes01 li").click(function(){ var tes01li = $(this).index(); var tes02li = $(".tes02 li").find("a").eq(tes01li).attr("href"); tes02li.click(); }); }); <ul class="tes01"> <li><img src="img01"></li> <li><img src="img02"></li> <li><img src="img03"></li> <li><img src="img04"></li> </ul> <ul class="tes02"> <li><a href="#link01">link01</a></li> <li><a href="#link02">link02</a></li> <li><a href="#link03">link03</a></li> <li><a href="#link04">link04</a></li> </ul>

  • JQueryを使ってcssを書き換え

    何となくコードを見てさわる程度の初心者です。 以下のようなソースを組みました。 <div id="slide"> <a href="01.htm"><img src="01.jpg" alt="01" id="alttxt" /></a> </div> <div id="slidenavi"> <ul> <li><a href="01.html"><img src="s_01.jpg" alt="01" class="b_01.jpg" /></a><span class="active"></span></li> <li><a href="02.htm"><img src="s_02.jpg" alt="02" class="b_02.jpg" /></a><span class="active"></span></li> <li><a href="03.html"><img src="s_03.jpg" alt="03" class="b_03.jpg" /></a><span class="active"></span></li> </ul> </div> #slideがメインエリアで、#slidenaviがメインエリアの画像とリンク先を切り替えるナビゲーションボタンになっています。 ナビに連動したメインエリア用の画像ファイル名は #slidenavi の img の classに入れておいて、それを読み込んで代入するというおかしなやり方で呼び出していますが、ここまではうまくいきました。 問題はここからです。 最初の状態では<span class="active"></span>はcssの設定でdisplay: noneとしてあります。 そして#slidenaviのボタンにマウスが乗ると、その部分の<span class="active"></span>をdisplay: blockとして表示したいのですが、これがどうしてもうまくいきません。 この部分も含めて、おかしな書き方になっている部分があれば教えてもらえないでしょうか。 jsファイルは以下の通りです。 $(function(){ $('#slidenavi ul li a').fadeTo(0,0.4); $('#slidenavi ul li a').hover(function(){ $(this).fadeTo(300,1.0); }, function(){ $(this).fadeTo(300,0.4); }) $('#slidenavi ul li img').mouseover(function(){ var bglink = $(this).attr("class"); var altTxt = $(this).attr("alt"); $("#slide img").attr("src","images/home/main/"+bglink); $("#slide img").attr("alt",altTxt); $("#slide span.active").css("display","block"); }); $('#slidenavi ul li a').mouseover(function(){ var Href = $(this).attr('href'); var Tget = $(this).attr('target'); $("#slide a").attr("href", Href); $("#slide a").attr("target", Tget); $("#slide a").click(function() { window.open(Href,'_self'); return false; }); }); });