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 のスニペットを正しく理解していないのでしょうか? どんな助けやアドバイスも大歓迎です。