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();

            }
        });

这里重要的部分是 $.load() ,它试图加载一个 url (http://www.MYWEBSITE.com/posts/index/page:2)。当 jQuery 发出请求时,服务器返回 500 内部服务器错误 如果我使用 jQuery.ajax(url); 也是一样的。如果我直接访问该网址,它会加载,没问题。

ajax 调用在我的本地开发服务器上也可以正常工作。所以这一定与我的主机 1and1 上的设置有关。这里发生了什么?我已经不得不处理这台主机的几个 500 个服务器错误。

我已按如下方式更改了我的 .htaccess 文件以修复之前的 500 个错误:

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 应用程序/中的 .htaccess:

<IfModule mod_rewrite.c>
   AddType x-mapp-php5 .php


    RewriteEngine ON
    RewriteBase /
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
 </IfModule>

CakePHP 应用程序/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 吗?当我的参数大于一时,我使用 $.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 服务器上的事实有关在第 1 和第 1 案例成为一个问题。在阅读 CakePHP 文档后,我意识到我什至不需要目录,因为视图来自同一个控制器。因此生成的代码。

于 2012-04-26T12:08:32.990 回答