2013-09-10 112 views
0

我有一個名爲price的標籤,這個標籤會自動從服務器每兩秒更新一次它的值。此外,我有一個按鈕或鏈接,當我點擊時增加數據庫中的這個價格。問題是如何在不重定向到同一頁面的情況下保存數據。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問題。在這兩種情況下,我感謝您的幫助

+0

使用空視圖。 – Idipaolo

回答

1

如果你不想刷新頁面來做到這一點,你需要使用Ajax..since你已經有了這個唯一的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

當我們傳遞increse_price作爲Ajax調用和方法參數後,在你r函數,則必須使用$_POST['increase_price']來捕獲它,然後分配給另一個變量

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

應該爲你

1

做的伎倆正常流程是,當你點擊一個鏈接時,瀏覽器從服務器請求一個新的頁面,然後呈現內容。

如果你想改變客戶端的DOM中的東西,你需要Javascript。

隨着使用Javascript,你可以跳過完整的頁面重載,因爲你可以要求你所需要的準確信息,然後用它更新DOM。這被稱爲AJAX

雖然你可以用普通的JavaScript做AJAX它通常是更容易使用像jQuery JavaScript框架,使事情變得更容易。

相關問題