【发布时间】:2011-03-23 05:29:49
【问题描述】:
我正在使用 CakePHP 1.3.7,我正在尝试执行以下操作:
在给定的页面上,用户可以单击一个链接(或图像,或按钮,无关紧要),该链接传递一个保存到数据库中的参数。但是,所有这一切,无需刷新页面。
我一直在做一些研究,我相信我也需要使用 AJAX 来完成这项工作。但是,我找不到一个很好的例子/解释如何做到这一点。
我认为这个想法是使用 AJAX 创建链接,它调用将接收变量作为参数的控制器/动作并执行操作以将其保存在数据库的相应字段/表中。
有人有我想做的小例子吗?或者也许指向我一些解释它的教程......提前非常感谢!
编辑
好的,谢谢大家的回复。他们没有直接工作,但我认为我越来越接近我想要的。这是我现在正在做的事情:
我认为有这段代码:
<div id="prev"><a>click me</a></div>
<div id="message_board"> </div>
我把这个JS文件叫做:
$(document).ready(function () {
$("#prev").click(function(event) {
$.ajax({data:{name:"John",id:"100"}, dataType:"html", success:function (data, textStatus) {$("#message_board").html(data);}, type:"post", url:"\/galleries\/add"});
return false;
});
});
我在 galleries 控制器中的 add 操作如下所示:
function add() {
$this->autoRender = false;
if($this->RequestHandler->isAjax()) {
echo "<h2>Hello</h2>";
print_r($this->data);
$this->layout = 'ajax';
if(!empty($this->data)) {
$fields = array('phone' => 8, 'modified' => false);
$this->User->id = 6;
$this->User->save($fields, false, array('phone'));
}
}
}
单击“#prev”元素时,我从 add 操作中得到响应,我知道是因为文本“Hello”打印在 #message_board 中。它在不刷新页面的情况下执行此操作,这就是我需要的原因。我的问题是我不能让 $.ajax() 函数发送任何数据,当它到达控制器时 $this->data 是空的,所以它永远不会进入将信息保存到数据库的 if 中(现在它保存只是一件简单的事情,但我希望它保存来自视图的数据)。
谁能看到我做错了什么?如何将数据发送到控制器?
【问题讨论】:
-
更正并澄清了答案。
-
阿尔伯特 print_r($_REQUEST);你可能会找到答案!
-
我试过了,你是对的,我可以找到那里发送的数据。只是我认为 $this->data 将保存所有 POST 数据,但正如 Amadan 在下面解释的那样,它仅在通过表单提交数据时才起作用。非常感谢您的帮助!