• ベストアンサー

AJAXでページング

下記サンプルに、ページング処理を追加したいのですが、 どうすればよいでしょうか? http://www.atmarkit.co.jp/fdotnet/jqueryref/08ajax1/ajax1_08.html

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

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

IE8だと、「条件コンパイルは中止されます」とエラー表示になってしまいます。 =>@マークが条件コンパイルのマークアップと判断されてるみたいです。 その場しのぎで対処しました。  var ResultSets = [];  $.each(data,function(index,value){   ResultSets.push(value);  });  var hits= parseInt(ResultSets[0].totalResultsAvailable);  var currentItem = parseInt(ResultSets[0].firstResultPosition);

re999
質問者

お礼

修正ありがとうございました。 おかげで、IE8, Google Chromeでも、無事、動作確認できました。 また、今回は、この質問のために、貴重なお時間を割いていただき、 ホントにありがとうございました。 なお、コードの中身等については、これから理解していきたいと思っていますので、 出来れば、リンク先とか、デモページとか、もうしばらくこのままの状態でいただけると、ありがたいです。 また、別室サイトの方も拝見しましたが、色々、サンプルを掲載されているようなので、 参考にさせていただきます。 ではー。

その他の回答 (5)

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

おそらく、 data.@attributes.totalResultsAvailable とか data.@attributes.firstResultPosition の@にIEが反応してしまっているのかなあ? 配列index番号アクセスにすればよいかも、試してみます。

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

サンプルが長くなっちゃたんで、しきりなおして、Object施工を図り、解り易いソースに書き直してみたぞ。 例によって、ここ↓にアップした。 https://gist.github.com/767710

re999
質問者

補足

「回答ありがとうございます」&「スクリプトを作成いただき、大変恐縮です」 早速、デモページを拝見させていただいたのですが、 IE8だと、「条件コンパイルは中止されます」とエラー表示になってしまいます。 (ちなみに、FireFoxでは、ちゃんと正常にページングされてました) これは、どのように対処したらよいでしょうか?

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

続き  function dataout(data){   $('#result').empty();   var hits= parseInt(data.@attributes.totalResultsAvailable);   var itemPerPage = 10;   var pages=(hits % itemPerPage==0)?parseInt(hits/itemPerPage):parseInt(hits/itemPerPage)+1;   var currentItem = parseInt(data.@attributes.firstResultPosition);   var currentPage =parseInt(currentItem/itemPerPage);   $('#result').append('<hr><span><検索結果> ' + hits +'件</span>'); //Page Navigation 書き出し部   var nextguide;   if (pages<=10){    var pages=Math.min(    (hits % itemPerPage==0)?    parseInt(hits/itemPerPage):    parseInt(hits/itemPerPage)+1,10);    nextguide = NaviMenuAdd(pageset,pages,itemPerPage);   }else{    nextguide = NaviMenuAdd(pageset,10,itemPerPage);    var nextp =$(document.createElement("a"));    nextp.attr({href:"javascript:void(0);"});    nextp.text(">>");    nextp.bind("click",function(event){    event.preventDefault();    pageset=pageset+1;    Go_Search(pageset*10*itemPerPage+1);    });    nextguide.append(nextp);    if (pageset>0){    var prevp =$(document.createElement("a"));    prevp.attr({href:"javascript:void(0);"});    prevp.text("<<");    prevp.bind("click",function(event){     event.preventDefault();     pageset=pageset-1;     Go_Search(pageset*10*itemPerPage+1);    });    nextguide.prepend(prevp);    }   }   $('#result').append(nextguide);   $('#result > span > a').css({margin:"5px",color:"black",background:"#cff"});   if (pageset>0){    $('#result > span > a:eq('+ (currentPage%10+1) + ')').css("background","yellow");   }else{    $('#result > span > a:eq('+ currentPage%10 + ')').css("background","yellow");   } //結果リスト書き出し部   var result = '<ul>';   $.each(data.Result,    function(index,value){    result += "<li><a href='" +    value.Url + "'>" +    value.Title + "</a></li>";    });   result += "</ul>";   $('#result').append(result);  } }); </script> </head> <body> <form> <input type="text" id="keywd" /> <button type="button" id="btn">検索</button> <div id="result"></div> </form> </body> </html>

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

とりあえず、ベタコーディングのサンプル ※全角空白は半角空白に直してね! <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Yahoo Blog Search API Test</title> <style type="text/css"></style> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.4");</script> <script type="text/javascript"> $(function(){  var pageset = 0  $("#btn").click(function(){   //myNavi.pageset = 0;   Go_Search(1);  });  function Go_Search(start){   $.getJSON('http://search.yahooapis.jp/BlogSearchService/V1/blogSearch?callback=?',    {appid:"ここにあなたのYahooAplivationidを入れて",    output:"json",    query: $('#keywd').val(),    results:10,    start:start    },dataout);  }  function NaviMenuAdd(pageset,pages,itemPerPage){   var start=pageset*10;   pages=pages+start;   var nextguide=$(document.createElement("span"));   for(var i=start;i<pages;i++){    var startItem = i*itemPerPage +1;    var nexta =$(document.createElement("a"));    nexta.attr({href:"javascript:void(0);"});    nexta.text((i+1)+"頁目");    nexta.bind("click",{start:startItem},function(event){    event.preventDefault();    Go_Search(event.data.start);    });    nextguide.append(nexta);   }   return nextguide;  } 回答欄が足りないので続きます。

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

サンプルだと「Yahoo!ブログ検索API」サービスを使ってますけど、このAPIでのページング処理だと、ページング単位をn件(最大50件ですね) resultsにnをセット、startに 1 + n×(ページ数-1)をセット(最大1000まで)して 毎回処理結果を得ていけばよいですね。 リクエストする度にページングナビゲーション部分をDOM関数で、動的に作っていって、 現在どのページかわかるようにしてあげればよろしいかと。

関連するQ&A