cakephp保存数据而无需重新加载页面

时间:2013-09-10 22:51:41

标签: php jquery cakephp

我有一个名为price的标签,此标签每两秒从服务器自动更新其值。我还有一个按钮或链接,当我点击时,它会增加数据库中的这个价格。问题是如何保存数据而不重定向到同一页面。

我的代码:

<?php 
echo $this->html->link('Increase price', array('controller' => 'example', 'action' => 'increase_price', $param1), array ('id' => 'btPrice'));
?>

在ExampleController中,代码是

    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问题。在这两种情况下,我感谢您的帮助

2 个答案:

答案 0 :(得分:1)

如果你不想重新加载页面来执行此操作,则需要使用Ajax ..因为你已经有了这个唯一的id,你需要做的是使用Jquery Ajax来处理它。

首先下载jquery lib并将其放入app/webroot/js文件夹并加载

http://jquery.com/download/在这里下载Jquery lib

然后你可以这样做:

<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作为参数传递而且方法是post,因此在您的函数中,您必须使用$_POST['increase_price']来捕获它然后分配给另一个变量

例如:$param1 = $_POST['increase_price'];然后你可以使用它..

应该为你做的伎俩

答案 1 :(得分:1)

正常的流程是,当您点击链接时,浏览器会从服务器请求新页面,然后呈现内容。

如果您想从客户端更改DOM中的某些内容,则需要使用Javascript。

使用Javascript,您可以跳过整个页面重新加载,因为您可以请求所需的确切信息,然后使用它更新DOM。这称为AJAX

虽然你可以使用普通的Javascript进行AJAX,但使用像jQuery这样的Javascript框架通常会容易得多。