2014-02-22 100 views
1

我在我的視圖中有代碼,但通過ajax發送給我的控制器動作(如add.ctp的最後部分所示)

//add.ctp 
<?php 
    echo $this->Form->create('Poll',array('action' => 'index')); 
    echo $this->Form->input('one', array('id'=>'name')); 
    echo $this->Form->input('two', array('id'=>'email')); 
    echo $this->Form->input('three', array('id'=>'message')); 
    echo $this->Form->input('four', array('id'=>'four')); 


echo $this->Js->submit('Send', array('id' => 'btn'), array(
'before'=>$this->Js->get('#sending')->effect('fadeIn'), 
'success'=>$this->Js->get('#sending')->effect('fadeOut'), 
'update'=>'#success' 
)); 
    echo $this->Form->end(); 
    ?> 

<div id="sending" style="display: none; background-color: lightgreen;">Sending...</div> 
<script> 



$('#btn').click(function(event) { 

form = $("#PollIndexForm").serialize(); 

    // console.log(form); 
$.ajax({ 
    type: "POST", 
    url: 'pollsController/index';, 
    data: form, 

    success: function(data){ 
     // 
    } 

}); 

event.preventDefault(); 
// return false; //stop the actual form post !important! 

}); 

</script> 
在得到我的控制器

,我做了一個isAjax要求測試,如果失敗

public $components = array('RequestHandler'); 

public function index(){ 
$this->autoRender = false; 

     if($this->RequestHandler->isAjax()){ 
    echo debug('Ajax call'); 

     } 
    if(!empty($this->data)){ 
     echo debug('not empty'); 
     } 
} 

每次都遇到我試圖運行這個和$this->request->is('ajax')永遠是假的時候「不空」 我的CakePHP的版本是2.3和我已經嘗試$this->request->is('ajax')和所有。 什麼,我錯過了

+0

你能嘗試打開開發者控制檯或螢火蟲或一些調試工具,並複製請求標頭?另外請注意您的網址'pollsController'是很奇怪的,儘量只** **投票我懷疑你將被重定向 – lp1051

回答

1

你跟你的AJAX調用發送正確的頭,我會很感激,如果有人能說出?

{ 'X-Requested-With': 'XMLHttpRequest'} 

如果使用的是jQuery,你可以使用:

$.ajaxSetup({ 
    headers: { 'X-Requested-With': 'XMLHttpRequest' } 
}) 

您可以Chrome developer tools檢查它的網絡選項卡,在這裏你必須選擇根據您的要求。

,這裏是the documentation for ajaxSetup()

編輯:

你可以把它放在這裏:

<script> 
$('#btn').click(function(event) { 
    form = $("#PollIndexForm").serialize(); 
    $.ajaxSetup({ 
     headers: { 'X-Requested-With': 'XMLHttpRequest' } 
    }) 
    $.ajax({ 
     type: "POST", 
     url: 'pollsController/index';, 
     data: form, 
     success: function(data){ 
     } 
    }); 
    event.preventDefault(); 
    // return false; //stop the actual form post !important! 
}); 
</script> 
+0

jQuery的發送,默認情況下,沒有必要設置。 – ceejayoz

+0

作爲一個新手,我從來沒有聽說過這個我該怎麼把這個文件是什麼之前?我使用CakePHP的框架 – Yormie

+0

@ceejayoz不正確,取決於版本,系統,服務器等。例如,我必須做這樣... – Kamil

1

在代碼中,你有

if($this->RequestHandler->isAjax()){ 

儘量使條件如下:

if ($this->request->is('ajax')) { 

} 

http://book.cakephp.org/2.0/en/appendices/2-0-migration-guide.html?highlight=isajax#requesthandlercomponent

RequestHandlerComponent:許多RequestHandlerComponent的方法 只是代理了CakeRequest方法。以下方法已 棄用,並將在未來的版本中刪除:isSsl()isAjax() isPost()isPut()isFlash()isDelete()getReferer()getClientIp()

+0

我剛剛做到了。相同的結果 – Yormie

相關問題