

１０日ほど前に、ぐるなびの「前の結果」「次の結果」ボタンの表示の問題で投稿した者です。

Unarist様のおかげで、その問題は解決しました。ありがとうございました。

今度は、「先頭へ」と「最後へ」のボタンを作り、クリックすれば、それぞれ先頭と最後のページが表示されるようしたいです。「先頭へ」は以下のコードで、簡単に思い通りの結果が得られました。

[code]

    jQuery("#load_first").on('click', function() {
       params_shop.offset_page = 1; // 先頭のページなので、１を指定        
         jQuery.getJSON(url_rest, params_shop, function(result) {
            resultLoopback(result);　// ５００件ごとに飲食店を表示（飲食店に連番でつけた番号、名前、地域、最寄駅など）
            resultNum(result);　// 現時点での飲食店の表示件数（トータル）を表示
          });
       });
    
[/code]

ところが、「最後へ」については、以下のコードではうまくいかないようで、苦戦をしています。

[code]

    jQuery("#load_last").on('click', function() {
       jQuery.getJSON(url_rest, params_shop, function(result) {
         if(result.total_hit_count % 500 == 0) {　
           params_shop.offset_page = Math.floor(result.total_hit_count / 500); 
         } else {
           params_shop.offset_page = Math.floor(result.total_hit_count / 500) + 1;
         }
         resultLoopnext(result);
         resultNum(result);
     });        
    
    });
    
[/code]

`if(result.total_hit_count % 500 == 0) {` の部分の処理については、こうです。

飲食店のトータルのヒット数（例えば、１０００件、２０００件など、めったにないが）を５００で割った時に、余りが出なければ、`params_shop.offset_page`（現在のページ番号は）  
`result.total_hit_count / 500` （トータルのヒット数を500で割る） の値になる。

余りが出れば（たいてい、余りが出るものである）、`params_shop.offset_page`（現在のページ番号は）  
`result.total_hit_count / 500 ＋ 1`（トータルのヒット数を500で割った値に１を足す） の値になる。

`if(result.total_hit_count % 500 == 0) {` からの部分を

`jQuery.getJSON(url_rest, params_shop, function(result) {` の処理の前に記述  
すべきだと思って、最初はそのように記述したのですが、「最後へ」ボタンをクリックしても、まったく反応が  
ありませんでした。

そこで、`jQuery.getJSON(url_rest, params_shop, function(result) {` の中に記述すると  
反応がありました。ですが、飲食店に連番でつけた番号が変わるだけで、肝心の店の名前や地域、最寄駅などが変わってくれません。

このように、肝心の部分が更新された状態で、表示させたいのですが、どうしたらいいでしょうか？

javascriptの全体のコードは、前回「ボタンクリックの関数が残ってしまう」の際に、投稿していますので、それを参考にしていただければと思います。

状況を把握していただいている unarsit 様に、ご返答願えたらと思いますが、よろしくお願いします。


CC BY-SA 3.0
2016-10-27T14:38:55.520
29945
2016-10-27T16:22:11.860
2016-10-27T16:22:11.860
2376
19190
question
jquery
ボタンクリックの関数が残ってしまう。（新）


`jQuery.getJSON`で取得しているのは **1ページ目の結果** でしかないからではないでしょうか。

もし、APIを叩いて最終ページを算出してそのページを取得したいのであれば、結果を触ってから **もう一度その最終ページのAPIを叩くひつようがある**
でしょう。

(それよりも初回ロード時に変数等にページ数をキャッシュしておいたほうが手っ取り早い気はしますが。)

* * *

例）

[code]

       jQuery.getJSON(url_rest, params_shop).then(function(result) {
         params_shop.offset_page = Math.ceil(result.total_hit_count / 500);
         return jQuery.getJSON(url_rest, params_shop);
       }).then(function(result){
         resultLoopnext(result);
         resultNum(result);
       });        
    
[/code]


CC BY-SA 3.0
2016-10-27T15:25:52.793
29947
2016-10-27T15:25:52.793
2376
29945
answer