【发布时间】:2013-12-25 19:24:07
【问题描述】:
我已经用这个进行了 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!!');
}
}
}
【问题讨论】:
-
在 ajax 请求之前调用
console.log(ROOT);的结果是什么? -
可以直接在浏览器中查看网址吗?你看到了什么?
-
没有 PHP 代码是无法回答的。这是在本地设置上还是在其他地方的托管服务器上?可能是 ModSecurity 妨碍了您的通话。但可以是任何东西,你所展示的 JavaScript 不足以回答。
-
从命令行调用
curl -I [url of ajax]会发生什么?此外,您的 PHP 错误日志或 Apache 错误日志中会显示什么(如果有的话)? -
"什么都不会发生,因为 ..." 会发生什么,以及请求的 确切 url?意外的 403 可能表示正在执行不同的代码或没有代码正在执行。正如 JackGould 所说,检查日志以确定正在发生的事情(app/tmp 日志、php 日志、Web 服务器日志)