我用这个做了一个ajax调用:
$('.start-rate-fixed').on('click', function(e){
e.preventDefault();
var videoRate = $('.start-rate input[name="rating"]:checked').val(),
productId = parseInt($('.popover-content').prop('id'));
$.ajax({
url : ROOT + 'products/rate_video',
type : 'POST',
data : {
'data[Product][id]' : productId,
'data[Product][success_rate]' : videoRate
}
}).done(function(res){
var data = $.parseJSON(res);
alert(data);
});
});
我在default.ctp中将ROOT定义为我的cakephp项目的webroot,其中包含:
<script type="text/javascript">
var ROOT = '<?php echo $this->Html->url('/');?>';
</script>
并尝试从我的产品控制器中定义的函数“rate_video”中检索数据,但是我收到此错误。此外,我尝试了一个简单的ajax测试功能,但它向我展示了同样的问题。
控制器代码
public function rate_video(){
$this->autoRender = false;
if($this->request->is('post') && $this->request->is('ajax')){
$success_rate = $this->request->data['Product']['success_rate'];
$this->Product->id = $this->request->data['Product']['id'];
if($this->Product->saveField('success_rate', $success_rate)){
echo json_encode('Successfully Rated');
} else {
echo json_encode('Error!!');
}
}
}
答案 0 :(得分:0)
请在请求网址的末尾添加dataType和正斜杠(/)
$.ajax({
url : ROOT + 'products/rate_video/',
type : 'POST',
data : {
'data[Product][id]' : productId,
'data[Product][success_rate]' : videoRate
},
dataType: 'json',
}).done(function(res){
答案 1 :(得分:0)
我遇到了同样的问题并通过将AJAX调用中的URL调用到我知道可行的URL来解决它。然后尝试直接在Web浏览器中访问您尝试通过AJAX调用的URL - 很可能您正在访问未创建视图文件的控制器。要解决此问题,您必须确保所访问的控制器方法没有要呈现的视图 - 设置$ this-&gt; render(null)
答案 2 :(得分:0)
如果你的网址不正确,那么
url: '<?php echo Router::url(array('controller' => 'Controllername', 'action' => 'actionname')); ?>'
以上网址提供了从根到您的操作的URL的ajax。
403的其他原因是你的auth功能,如果你在你的控制器中使用auth然后让你的ajax功能允许像
$this->Auth->allow('Your ajax function name here');
答案 3 :(得分:-1)
您的脚本位于localhost/dev.popover/products/rate_video
,但ajax ROOT为/ -
,表示localhost/
,ajax已向
'localhost/products/rate_video'
正确的解决方案是
<script type="text/javascript">
var ROOT = '<?php echo $this->Html->url('/dev.popover/');?>';
</script>