$ this-> request-> is('ajax')始终为false

时间:2014-02-22 13:59:24

标签: javascript php jquery ajax cakephp

我的视图中有代码,但是通过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')等等。 如果有人能指出我错过了什么,我将不胜感激

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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()