我的视图中有代码,但是通过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 :(得分: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')) {
}
RequestHandlerComponent:RequestHandlerComponent的许多方法都是 只是CakeRequest方法的代理。已经有以下方法 已弃用,将在以后的版本中删除:isSsl()isAjax() isPost()isPut()isFlash()isDelete()getReferer()getClientIp()