Javascript jQuery-Ajax在某些帖子上返回错误500
我有一些Ajax已经在一个实时站点上运行,现在它已经停止工作了。Ajax应该返回一个页面,但返回的是一个 奇怪的是,我可以导航并发布到Ajax调用的页面,因此页面只能通过Ajax调用($.post)工作 另一件奇怪的事情是,它在当地工作得很好,但不是在生活中。此外,该站点上的所有其他Ajax都在工作 有人知道这可能是什么吗?顺便说一下,这都是用CakePHP实现的jQuery 编辑: apache错误日志显示: “过早结束脚本头:php脚本,引用…” 编辑2:Javascript jQuery-Ajax在某些帖子上返回错误500,javascript,jquery,ajax,cakephp,post,Javascript,Jquery,Ajax,Cakephp,Post,我有一些Ajax已经在一个实时站点上运行,现在它已经停止工作了。Ajax应该返回一个页面,但返回的是一个 奇怪的是,我可以导航并发布到Ajax调用的页面,因此页面只能通过Ajax调用($.post)工作 另一件奇怪的事情是,它在当地工作得很好,但不是在生活中。此外,该站点上的所有其他Ajax都在工作 有人知道这可能是什么吗?顺便说一下,这都是用CakePHP实现的jQuery 编辑: apache错误日志显示: “过早结束脚本头:php脚本,引用…” 编辑2: 这一切都发生在我将服务器切换到SS
这一切都发生在我将服务器切换到SSL时。上面写着错误,然后是“端口80”。检查apache和php
错误日志
!它会在那里
此问题最常见的原因是脚本在向服务器发送完整的头集(可能是任何头集)之前死亡。若要查看是否存在这种情况,请尝试从交互式会话独立运行脚本,而不是作为服务器下的脚本运行。如果您收到错误消息,这几乎肯定是“脚本头过早结束”消息的原因。即使CGI在命令行中运行良好,请记住,在web服务器下运行时,环境和权限可能不同。CGI只能访问Apache配置中指定的用户和组所允许的资源。此外,环境将与命令行上提供的环境不同,但可以使用mod_env提供的指令进行调整 第二个最常见的原因(除了人们根本不输出所需的头之外)是与Perl的输出缓冲交互的结果。要使Perl在每个输出语句后刷新其缓冲区,请在发送HTTP头的print或write语句周围插入以下语句:
{
local ($oldbar) = $|;
$cfh = select (STDOUT);
$| = 1;
#
# print your HTTP headers here
#
$| = $oldbar;
select ($cfh);
}
通常,只有在从脚本调用外部程序并将输出发送到stdout时,或者在发送头和实际内容开始发送之间存在长时间延迟时,才需要这样做。为了最大限度地提高性能,您应该在发送头的语句之后关闭缓冲区刷新(使用$|=0或等效值),如上所示
如果您的脚本不是用Perl编写的,请对您正在使用的任何语言执行相同的操作(例如,对于C,在编写标题后调用fflush()
“脚本头过早结束”消息的另一个原因是RLimitCPU和RLimitMEM指令。如果CGI脚本由于资源限制而被终止,您可能会收到消息
此外,suEXEC、mod_perl或其他第三方模块中的配置问题通常会干扰CGI的执行,并导致“脚本头过早结束”消息
CPHP:
<?php
echo 'If this appears, we\'re stable!';
?>
然后逐渐添加代码块,直到遇到问题。我建议这个页面的第2版是
<?php
print_r($_POST);
?>
因为这将允许您检查表单帖子中返回的内容
如果以上所有内容都失败,请提供以下内容
1) PHP页面功能的描述,或者代码示例。
2) 调用PHP页面的JavaScript代码。可能生产站点违反了
浏览器中直到第三个斜杠的URL必须与AJAX帖子中的URL完全匹配,否则浏览器的Javascript安全约束将拒绝响应。服务器可能实际看到请求并正确响应,但浏览器会将空字符串返回给AJAX调用。首先,这与jQuery、AJAX、POST、CakePHP或HTTP头无关。完整的错误消息是“脚本过早结束”,这意味着Apache用于运行PHP脚本的PHP进程意外终止(即,在PHP进程完成其部分Fast CGI协议之前)。这通常意味着PHP进程崩溃或导致“分段错误” PHP分段故障可能很难排除,而且永远不会发生;PHP永远不会崩溃。它崩溃的原因可能是多方面的。不过,也许这是一个简单的解决办法 我要做的第一件事是完全卸载PHP并安装最新的稳定版本。如果您运行的是PHP5.3和Windows,那么您应该只使用VC6二进制文件(“VC6x86ThreadSafe”包);VC9包在Apache使用时会导致PHP崩溃。重新安装可能会解决您的问题,因为旧版本PHP的扩展DLL/SOs可能仍然存在于live server上的扩展目录中 如果在Windows上使用MySQL,我要做的下一件事就是确保MySQL
bin
目录位于live server的目录中。这样做的原因是为了确保操作系统可以“找到”libmySQL.dll。您应该能够SSH