1

Javascript、Node.js、Socket.io の経験はあまりありません。jQuery ページネーション プラグインhttp://beneverard.github.com/jqPagination/を使用して、mysql データベースにクエリを実行し (ユーザーがテキスト ボックスに入力したキーワードを使用)、結果の総数を取得するアプリを作成しようとしています。最初のページの最初の 15 件の結果と共に (LIMIT を使用して) 戻り、結果の総数を使用して、必要なページ数を決定します。

これは、動作しないコード スニペット (ページネーションの最大ページ数を設定するためのクライアント側の JavaScript) です。

var maxpagenumber;

socket.on('resultsnumber', function(count)
{
    maxpagenumber = ~ ~(this.count / 15) + 1;
});

$('.pagination').jqPagination({
    max_page: maxpagenumber,
    paged: function(page)
    {
        ...
    }
});

Chrome で変数 maxpagenumber を調べたところ、未定義であることがわかりました。最初の 15 件の結果のクエリは機能しますが、ページネーションが 1 つの最大ページのみを表示するだけです。

オンラインでヘルプを探していたところ、非同期コールバック関数外の変数へのアクセスに関する質問を見つけました: Using variable outside of ajax callback function。マークされた回答のアイデアを使用して、コードに適用しました。

var setPagination = function(maxpagenum)
{
    $('.pagination').jqPagination({
        max_page: maxpagenum,
        paged: function(page)
        {
            ...
        }
    });
}

socket.on('databasenumber', function(count)
{
    var maxpagenumber = ~ ~(this.count / 15) + 1;
    setPagination(maxpagenumber);
});

これにより、前のコード スニペットと同じ結果が得られます。これまでのところ、唯一の機能するオプションは次のとおりです。

socket.on('databasenumber', function(count)
{
    var maxpagenumber = ~ ~(this.count / 15) + 1;
    $('.pagination').jqPagination({
        max_page: maxpagenumber,
        paged: function(page)
        {
            ...
        }
    });
});

ユーザーが新しいキーワードをテキストボックスに入力して再度検索するまで、これは完全に機能します。ユーザーが 2 回目の検索を行うと、多くのバグが発生します。誰でもこれを機能させる方法について何か考えがありますか? 問題を説明するためにさらにコードを表示する必要がありますか? たぶん、私はこの Javascript のスニペットを正しく理解していないのでしょうか? どんな助けやアドバイスも大歓迎です。

4

1 に答える 1

0

問題は、maxpagenumber を 1 回だけ設定していることにあるようです。データセットが変更されるたびに設定する必要があります。2番目のセットを作り直したもののいくつかの組み合わせが最適だと思いますが、jqPagination コントロールに 100% 精通しているわけではないので、おそらくうまくいかないところです。API呼び出しを介して新しいmaxPageNumを供給する必要があるかもしれませんか?

于 2012-08-01T16:13:22.970 に答える