1

そのため、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>

どんな助けや洞察も大歓迎です!

4

3 に答える 3

1

Wireshark をインストールし、ページに移動したときにブラウザが行うリクエストと、AJAX を使用してリクエストしたときの違いを判断します。

http://www.wireshark.org/

そうして初めて、問題が何であるかをよりよく理解できます。

于 2012-04-25T14:39:36.633 に答える
1

代わりに $post を使用してみてください。パラメータが 1 より大きい場合、1 つのパラメータだけに $.post または get、$.ajax を使用します。

于 2012-04-25T14:41:24.410 に答える
0

したがって、これは、呼び出しが AJAX であるかどうかに応じて、Cake によってレンダリングされるビューを変更する方法に問題があることがわかりました。

もともと私は、レンダリングされるビューを変更するためにこれを持っていました:

if ($this->RequestHandler->isAjax()) {  
   $this->render('/posts/ajax_paging');  // Special view for ajax pagination
}

これは私のローカル開発サーバーで問題なく動作しました。しかし、アップロードすると問題が発生しました。サーバーから、ビューが見つからないと言われました。

次のように変更すると、問題が修正されました。

if ($this->RequestHandler->isAjax()) {  
  $this->render('ajax_paging');  // Render a special view for ajax pagination
}

実際のフォルダー「Posts」にはキャピトル P があり、Windows サーバーでは大文字と小文字が区別されないため、「/posts」は「/Posts」に解決されますが、Linux サーバーに配置すると、 1and1でケースが問題になりました..また、CakePHPのドキュメントを読んだ後、ビューは同じコントローラーからのものだったので、ディレクトリさえ必要ないことに気付きました. したがって、結果のコード。

于 2012-04-26T12:08:32.990 に答える