Cakephp сохраняет данные без перезагрузки страницы

У меня есть метка цена, и эта метка автоматически обновляет свое значение каждые две секунды с сервера. Также у меня есть кнопка или ссылка, которая увеличивает эту цену в базе данных, когда я нажимаю. Проблема в том, как сохранить данные без перенаправления на ту же страницу.

Мой код:

<?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. В обоих случаях я ценю вашу помощь


person daniherculano    schedule 10.09.2013    source источник


Ответы (2)


если вы не хотите перезагружать страницу для этого, вам нужно использовать Ajax. Поскольку у вас уже есть уникальный идентификатор для этого, вам нужно использовать 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

Поскольку мы передаем increse_price в качестве параметра в вызове ajax, а метод является почтовым, в вашей функции вы должны использовать $_POST['increase_price'], чтобы поймать его, а затем назначить другой переменной

например: $param1 = $_POST['increase_price']; тогда можно использовать..

Должен сделать трюк для вас

person Geoffreyirl    schedule 10.09.2013

Обычный процесс заключается в том, что когда вы нажимаете на ссылку, браузер запрашивает новую страницу с сервера, а затем отображает содержимое.

Если вы хотите что-то изменить в DOM со стороны клиента, вам нужен Javascript.

С помощью Javascript вы можете пропустить полную перезагрузку страницы, потому что вы можете запросить точную информацию, которая вам нужна, а затем обновить DOM с ее помощью. Это называется AJAX.

Хотя вы можете использовать AJAX с простым Javascript, обычно намного проще использовать среду Javascript, такую ​​​​как jQuery, чтобы упростить задачу.

person user221931    schedule 10.09.2013