2011-06-17 56 views
2

这已经发生的事情,因为我迁移服务器(升级到一个专用的服务器)POST变量突然无法通过jQuery的工作基于AJAX调用

Ajax调用,基于jQuery,都工作正常了几个月(甚至几年)突然他们都停止了工作,横跨我的所有账户。你可以想像我的恐慌。

的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.'); 
      } 
     }); 
} 

但由于某些原因,即使萤火显示该职位的成功注册乏发送,PHP文件的回报完全是空的POST变量。在这两种情况下,print_r($_POST)print_r($_REQUEST)都返回空数组。如果我将该方法更改为GET机制,它会起作用 - 但我想将它保留在POST变量中。

+0

多么奇怪。在我看来,如果它是在迁移到新的服务器之后,更可能是您的Apache或PHP配置的问题... – Jivings 2011-06-17 11:24:28

+0

我知道!但是,目前inmotionhosting.com的服务器管理员毫无用处。 – jeffkee 2011-06-17 11:27:25

回答

0

奇怪的是,这个问题是由于post_max_size设置得太高。是的,太高。我不得不放弃核心php.ini文件中的内容。我把它设置为20000M跨越不同的账户,以确保它几乎是无限的,所以我不得不把它降到128M(根据核心php.ini最大),它的工作。

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头部,但这看起来不太可能,因为在出​​现错误之前,这一面没有任何变化。