Jqueryで外部ファイルを読み込んだ際のページング処理について困っています。

<script>
$(function(){
$('#time').change(function(){getContents();});
});

function getContents(){
var timeId =$('#time').val();
var countryId = getChecked('country_id[]');
var http = $.get (
"http://localhost/eigazuki/results/title:/time:" + timeId,
null,
function ( data ) {
$("#serviceListSection").html(data);
}
)
}
</script>

<select name="data[time]" id="time">
<option value="0〜300">気にしない</option>
<option value="0〜59">0分~59分</option>
</select>

<section id="serviceListSection"></section>

プルダウンが選択されるたびにそれに一致したデータをデータ一覧ページから取得してくる仕組みです。
1ページに30件表示です。次へをクリックしますと
http://localhost/eigazuki/search/title:/time:0〜300/page:2
と表示されるのですが、TOPページに戻され、resultページにある2ページ目のデータを取得してくれません。もうたいへん困っています。
難しい質問ですが、どなたかアドバイスをいただけないでしょうか?

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2012/04/28 13:02:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.2

回答回数1504ベストアンサー獲得回数493

ポイント140pt

ページの番号のリンク先がsearchになっているところをresultsに直して、
searchビューに、

$(".pagination a").live('click', function(){
  $("#serviceListSection").load(this.href);
  return false;
});

とすればいいのかな…

他2件のコメントを見る
id:Cherenkov

ページ遷移を抑制

2012/04/28 12:59:36
id:kyouryukun

そうなんですね。また詳しく自分でも調べてみます。
本当にありがとうございました!

2012/04/28 13:01:57

その他の回答1件)

id:taroe No.1

回答回数1099ベストアンサー獲得回数132

ポイント60pt

cakephpのページネーションとは関係ありません。



たとえば、チェックボックスを選択すると
内部でJavascriptの関数 getContents()が呼ばれて検索結果が表示されますよね。


getContentsの中の以下の部分の
var http = $.get (
"./results/title:/time:" + timeId + "/country_id:" + countryId + "/genre_id:" + genreId +
"/feeling_id:" + feelingId + "/partner_id:" + partnerId,
null,
のあたりで取得してます。


ページングの方ですが
http://kyouryu.sakura.ne.jp/eigazuki/search/title:/time:0%E3%80%9C300/country_id:1/genre_id:/feeling_id:/partner_id:/page:2
がリンク先になってますが
ここが間違ってます。

getContentsのような関数を作成して
リンクをクリックしたときに、その関数を呼び出し
その中のvar http = $.getあたりで
./results/title:/time:0%E3%80%9C300/country_id:1/genre_id:/feeling_id:/partner_id:/page:2
みたいな感じで呼び出せばうまくいくのでは?

id:kyouryukun

それの処理の流れは、2ページ目をクリックしたら「resultsページの2ページ目」からデータを取得するってことなので、私も同じく末にpage:2を追加しても良いと思いました。
./results/title:/time:" + timeId + "/country_id:" + countryId + "/genre_id:" + genreId +
"/feeling_id:" + feelingId + "/partner_id:" + partnerId + "/page:" +2

ってことです。どうやってページ番号を取得すればいいのかで詰まっています。今は・・・。

2012/04/28 09:02:46
id:Cherenkov No.2

回答回数1504ベストアンサー獲得回数493ここでベストアンサー

ポイント140pt

ページの番号のリンク先がsearchになっているところをresultsに直して、
searchビューに、

$(".pagination a").live('click', function(){
  $("#serviceListSection").load(this.href);
  return false;
});

とすればいいのかな…

他2件のコメントを見る
id:Cherenkov

ページ遷移を抑制

2012/04/28 12:59:36
id:kyouryukun

そうなんですね。また詳しく自分でも調べてみます。
本当にありがとうございました!

2012/04/28 13:01:57
  • id:Cherenkov
    javascriptとは関係なく、cakephpのページネーションの話なのでは?
  • id:Cherenkov
    1ページに30件表示になってないから確認できないです。
    公表を控えたいから載せたくないならわかりますが、ルール的にダメな理由はないと思いますよ。
  • id:Cherenkov
    ページネーションの問題じゃないかなー
  • id:Cherenkov
    (1.3しか使ったことないですが)普通のCakePHPのページネーションの実装では、
    条件をDBに投げた結果のページネーションオブジェクトをコントローラからビューに渡して、
    ページネーションオブジェクトをforeachで展開して、適当にnextとか表示してくれるヘルパーを付けておけばいいはず。

    現在の実装では、GETの返り値がベタ書きのHTMLになっていますよね。
  • id:kyouryukun
    ページネーションを調査してみます。
    すいませんが、
    >>GETの返り値がベタ書きのHTML
    とはhttp://kyouryu.sakura.ne.jp/eigazuki/search/title:/time:0%E3%80%9C300/country_id:/genre_id:/feeling_id:/partner_id:/page:2
    こういうことでしょうか?
  • id:Cherenkov
    http://kyouryu.sakura.ne.jp/eigazuki/results/title:/time:0%E3%80%9C300/country_id:2/genre_id:/feeling_id:/partner_id:/page:2
    こっちのほう。
  • id:kyouryukun
    http://adult-slider.com/js/slider.js
    を参考にもしました。それの処理の流れは、2ページ目をクリックしたら「resultsページの2ページ目」からデータを取得するってことなので、私も同じく末にpage:2を追加しても良いと思いました。
    ./results/title:/time:" + timeId + "/country_id:" + countryId + "/genre_id:" + genreId +
    "/feeling_id:" + feelingId + "/partner_id:" + partnerId + "/page:" +2

    ややこしい・・・。
  • id:kyouryukun
    searchプラグインを使用しているため、参考になるかは分かりませんが
    検索結果は次のように取得しています。

    >||
    /* ----------------------------------------------------
    検索結果ページ
    ---------------------------------------------------- */
    public function results() {

    $this->layout=""; //←ここを指定する

    // 検索条件設定でURLを生成
    // $this->Prg->commonProcess();

    //検索条件取得で検索条件を設定
    $conditions = $this->Movie->parseCriteria($this->passedArgs);

    //ページング設定(30件ずつ)
    $this->paginate = array(
    'conditions' => $conditions,
    'limit' => 5,
    );
    //検索に一致したデータをviewに送る
    $this->set('movies', $this->paginate('Movie'));

    //一致するデータがないのなら
    } else {
    }
    }
    ||<
  • id:Cherenkov
    ビューはどうなってますか
  • id:kyouryukun
    view側では

    <?php echo ($this->Paginator->hasPrev()) ? $this->Paginator->first('&laquo;', array('class' => 'first', 'escape' => false)) : '<span class="disabled">&laquo;</span>' ?>
    <?php echo $this->Paginator->prev('&lsaquo;', array('escape' => false), null, array('class' => 'disabled', 'tag' => 'span', 'escape' => false)); ?>
    <?php echo $this->Paginator->numbers($pager_numbers); ?>
    <?php echo $this->Paginator->next('&rsaquo;', array('escape' => false), null, array('class' => 'disabled', 'tag' => 'span', 'escape' => false)); ?>
    <?php echo ($this->Paginator->hasNext()) ? $this->Paginator->last('&raquo;', array('class' => 'last', 'escape' => false)) : '<span class="disabled">&raquo;</span>' ?>

    となっております。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません