Ajax和jQuery的500内部错误.Load()函数,直接访问url直接工作正常。 1and1服务器

Ajax和jQuery的500内部错误.Load()函数,直接访问url直接工作正常。 1and1服务器

问题描述:

因此,我正在使用jQuery .load()调用在CakePHP Web应用程序中实现无穷无尽的分页。Ajax和jQuery的500内部错误.Load()函数,直接访问url直接工作正常。 1and1服务器

下面是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调用也可以在我的本地开发服务器上正常工作。所以这一定是我的主机1和1上的设置。这里发生了什么?我已经不得不用这台主机处理几个500服务器错误。

我已经改变了我的.htaccess文件如下修正以前的500错误:

的.htaccess CakePHP中根:

<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> 

的.htaccess CakePHP中的应用程序/:

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


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

CakePHP中的.htaccess app/webroot /:

<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> 

任何帮助或见解都非常感谢!

所以事实证明,这是一个问题,我改变了由Cake渲染哪个视图的方式,这取决于调用是否是AJAX。

本来我有这个,改变所呈现的观点:我的哪个地方发展服务器上的完美无缺

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 
} 

我猜它有一个事实,即实际文件夹“的帖子”有国会大厦P和我的Windows服务器不区分大小写做所以“/ posts”解析为“/ Posts”,但是一旦我将它放在1and1的linux服务器上,情况就成了问题。在阅读CakePHP文档后,我意识到我甚至不需要该目录,因为视图来自同一个控制器。因此产生的代码。

安装Wireshark并确定浏览器导航到页面时与使用AJAX请求浏览器时请求之间的差异。

http://www.wireshark.org/

只有这样,你将拥有的问题是什么更好的主意。

+0

感谢您的想法,区别在于一个是AJAX请求,另一个是香草GET。这让我看到了我的控制器代码,我记得我有一个检查,当请求是AJAX时,会更改使用哪个Layout来呈现请求。对此进行评论会修复Ajax请求,并且它可以正常工作。虽然没有正确,因为我有一个不同的布局的理由。在我多玩这个之后更新我的问题。 – Dsyko 2012-04-25 14:58:24

+0

就HTTP协议而言,AJAX请求和“vanilla”请求之间没有区别。差异在于浏览器如何处理信息。考虑到这一点,您应该能够查看请求中的差异并确定问题,或者至少调整必要的设置以使AJAX请求模仿您的vanilla get,这样您就不会触发发生的任何服务器错误。 – 2012-04-25 15:35:07

试着用$ post来代替吗? 当我的参数大于1时,我使用$ .post或get,$ .ajax作为一个参数。