我有一个名为 price 的标签,这个标签每两秒从服务器自动更新一次其值。我还有一个按钮或链接,当我点击时会增加数据库中的价格。问题是如何保存数据而不重定向到同一页面。
我的代码:
<?php
echo $this->html->link('Increase price', array('controller' => 'example', 'action' => 'increase_price', $param1), array ('id' => 'btPrice'));
?>
在示例控制器中,代码是
function increase_price($param1)
{
$this->autoRender = false; //Don't want a view
$example = $this->Example->findById($param1);
$example ['Example ']['price'] = $example ['Example ']['price'] + 1;
$this->Example->save($example );
}
价格上涨了,但 cakePhp 要求我查看,如果我执行 autoRender=false,那么我的页面将是空白的,我想保持在同一页面上。我不知道这是一个CakePhp问题还是Jquery问题。在这两种情况下,我都感谢您的帮助
如果你不想重新加载页面来执行此操作,你需要使用Ajax。由于您已经为此提供了唯一的ID,因此您需要做的是使用Jquery Ajax来处理此问题。
首先下载 jquery lib 并将其放入您的 app/webroot/js
文件夹中并加载它
http://jquery.com/download/在这里下载Jquery库
然后你可以做:
<script>
$( document ).ready(function() {
//do sth when click on #btPrice
$('#btPrice').click(function(){
$.ajax({
type:"POST",
//the function u wanna call
url:"<?php echo $this->webroot;?>example/increase_price/",
/* data you wanna pass, as your $param1 is serverSide variable,
you need to first assign to js variable then you can pass:
var param1 = '<?php echo $param1;?>';*/
data:{increase_price:param1},
success:function(data)
{
//update your div
}
});
});
});
</script>
您还必须修改increase_price function
由于我们在 ajax 调用中传递 increse_price as 参数并且方法是 post,因此在您的函数中,您必须使用 $_POST['increase_price']
来捕获它,然后分配给另一个变量
例如:$param1 = $_POST['increase_price']
;然后你可以使用它。
应该为你做这个技巧
正常的流程是,当您单击链接时,浏览器会从服务器请求一个新页面,然后呈现内容。
如果你想从客户端更改 DOM 中的某些内容,你需要 Javascript。
使用 Javascript,您可以跳过完整的页面重新加载,因为您可以请求所需的确切信息,然后使用它更新 DOM。这称为 AJAX。
虽然你可以用普通的Javascript做AJAX,但使用像jQuery这样的Javascript框架来使事情变得更容易。