2011-06-17 13 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頭部,但這看起來不太可能,因爲在出​​現錯誤之前,這一面沒有任何變化。