POST vars突然无法通过基于jQuery的AJAX调用

时间:2011-06-17 10:51:29

标签: php jquery ajax post

自从迁移服务器(升级到专用服务器)

以来,这种情况一直在发生

基于jQuery的AJAX调用几个月(如果不是几年)工作正常,突然他们在我的所有帐户中都停止了工作。你可以想象我的恐慌。

removefile函数如下所示:

 function removefile(filename,folder,targetdiv) { // universal AJAX file removal function. folder MUST include '/' at the beginning for calls. 
    $.post('ajax_removefile.php', {folder:folder, filename:filename },
        function(data){
            if(data=='1') {
            $('#'+targetdiv).html(filename+' has been successfully removed.');
            }
            else if(data=='0') {
            $('#'+targetdiv).html(filename+' is already removed - nothing more to remove.');
            }
        });
}

但由于某种原因,即使Firebug显示正在发送的POSt变量的成功注册,php文件也会返回完全空的POSt变量。在这两种情况下,print_r($_POST)print_r($_REQUEST)都会返回空数组。如果我将方法更改为GET机制它可以工作 - 但我想将它保存在POST变量中。

2 个答案:

答案 0 :(得分:1)

首先,您可以在PHP中看到原始传入请求:

$input = file_get_contents('php://input');
var(dump($input);

这将证明POST数据到达PHP或者它已经过滤了。

不要忘记将error_reporting设置为最大值。如果您不想在php.ini中设置它,可以在PHP源代码的开头使用ini_set(),或者使用php_value的.htaccess(和整数值)。

你的php.ini可能有问题。我不是肯定的,但可能是因为你的post_max_size的值远远高于32位的最大整数。虽然您的PHP似乎是在64位服务器上,但这可能是问题的根源。我建议你把它从200000M改为1G。要更改此设置,您可以使用上述.htaccess,但请使用ini_get()检查其有效性。

在您的AJAX查询中,它也可能是错误的HTTP标头,但这似乎不太可能,因为在此错误出现之前,这方面没有任何变化。

答案 1 :(得分:0)

奇怪的是,问题是由于post_max_size设置得太高。是的,太高了。我不得不把它放到核心php.ini文件中。我在不同的帐户中设置为20000M以确保它几乎无限制,所以我不得不将其降至128M(根据核心php.ini max)并且它有效。