そのため、jQuery .load() 呼び出しを使用して、無限のページネーションを CakePHP Web アプリに実装しています。
Javascript コードは次のとおりです。
$("#post_container").append('<div class="batch row" style="display:none;"></div>'); //append a container to hold ajax content
var url = $("a#next").attr("href"); //extract the URL from the "next" link
$(".paging").remove(); // remove the old pagination links because new ones will be loaded via ajax
if(url === undefined)
{
$("#ajax_pagination_text").html("<strong>Turtles all the way down. No more posts :(</strong>");
}
$("div.batch").load(url, function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
alert(msg + xhr.status + " " + xhr.statusText);
}
else {
$(this).attr("class","loaded row"); //change the class name so it will not be confused with the next batch
$(".paging").hide(); //hide the new paging links
$(this).fadeIn();
}
});
ここで重要な部分は、URL (http://www.MYWEBSITE.com/posts/index/page:2) をロードしようとする $.load() です。jQuery がリクエストを行うと、サーバーは 500 内部サーバー エラーを返します。jQuery.ajax(url); を使用しても同じです。その URL に直接アクセスすると、問題なく読み込まれます。
ajax 呼び出しは、私のローカル開発サーバーでも問題なく動作します。したがって、これは私のホスト 1 と 1 のセットアップに関するものである必要があります。何が起きてる?私はすでに、このホストで数回の 500 サーバー エラーに対処しなければなりませんでした。
以前の 500 エラーを修正するために、.htaccess ファイルを次のように変更しました。
CakePHP ルートの .htaccess:
<IfModule mod_rewrite.c>
AddType x-mapp-php5 .php
SetEnv PHP_VER
RewriteEngine ON
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
CakePHP app/ の .htaccess:
<IfModule mod_rewrite.c>
AddType x-mapp-php5 .php
RewriteEngine ON
RewriteBase /
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
CakePHP app/webroot/ の .htaccess:
<IfModule mod_rewrite.c>
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
RewriteEngine ON
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?q=$1 [QSA,L]
</IfModule>
どんな助けや洞察も大歓迎です!