2015-06-26 53 views
1

所以,我有一些簡單的代碼設置,我已經將它簡化爲僅僅用於測試目的的基本要素。下面是我的javascript:jQuery AJAX POST未被識別CakePHP 3

$('a#delete').on('click', function(e) { 
    e.preventDefault(); 
    $.post($(this).attr('href'), $('input.delete:checked').serialize()); 
}) 

這裏是我的控制器代碼:

public function delete() { 
    debug($this->request->is('ajax')); 
    debug($this->request->is('post')); 
    debug($this->request->data); 
    die(); 
} 

目前,我有我使用測試一個複選框:

<input type="checkbox" name="delete_portfolio" class="delete" value="15"> 

我一直在使用驗證提琴手,它發送POST請求數據「delete_portfolio=15」。但是,$this->request->is('post')返回false,即使這正是發送的內容。 $this->request->data爲空。有趣的是,$this->request->is('get')實際上返回true,但$this->request->query仍然是空的。

我只是想弄清楚我在做什麼錯誤發送一個AJAX POST請求蛋糕。

編輯

我只是想包括我在這裏找到了一些新的信息。最後我補充說:

debug($_SERVER['REQUEST_METHOD']); 
debug($_POST); 

要我控制器代碼,看看PHP所看到的請求的方法,原來它返回'POST'預期,並返回正確的數據,所以才CakePHP的3,這不是把它看作POST並沒有看到數據,也許這是一個錯誤?

+0

所以,問題不在於單擊事件不起作用。正如我在問題中所述,我可以看到帶有Fiddler的POST請求以及數據。我報告了我從控制器返回的內容,該控制器也收到了請求。我沒有在HTML中包含我點擊的鏈接,因爲我覺得這是不相關的,因爲問題不在於點擊事件。 –

+0

檢查'REQUEST_METHOD' [** server var **](http://php.net/manual/en/reserved.variables.server.php),如果在確定發送POST時不是'POST' '請求,那麼你的服務器/ PHP安裝需要一個或兩個bitchslaps。 – ndm

回答

1

我終於弄明白了什麼是錯的,以及其他人一定要考慮的事情。我啓用了安全組件,它將不安全的請求(ajax)重定向到安全請求(https)。由於此重定向正在發生,它正在將我的請求更改爲GET請求,並在我的表單被更改後拒絕我。爲了解決這個問題:

$this->Security->config('unlockedActions', ['delete']); 

被添加到我的控制器的beforeFilter函數。