自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用jQuery設(shè)計數(shù)據(jù)表格之實現(xiàn)Ajax功能

開發(fā) 前端
本文使用了php中的著名開發(fā)框架CI以及jQuery,指導(dǎo)讀者如何構(gòu)建了一個通用的數(shù)據(jù)表格幫助類,并且擁有ajax的功能(借助jQuery實現(xiàn))。讀者從中可以學(xué)到不少CI框架以及jQuery的技巧和知識。

當(dāng)前在Web開發(fā)中,jQuery和PHP無疑是絕佳的配合。其中PHP由于其簡單易用,深得開發(fā)者的喜愛,而jQuery則由于在前端開發(fā)中的靈活和簡單,功能強大,可以做出很多很眩目的效果。在上篇文章中,主要講述了設(shè)計表格基類,本文將主要介紹測試和運行部分,以及加入AJAX功能,整合jQuery。

測試運行

現(xiàn)在,我們可以在CI中測試運行下我們所寫的數(shù)據(jù)表格助手類是否有效果,在測試前,先在MYSQL中建立數(shù)據(jù)表如下:

  1. CREATE DATABASE `dg_test`;  
  2.   CREATE TABLE `users` (  
  3.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  4.   `username` varchar(80) NOT NULL,  
  5.   `password` varchar(32) NOT NULL,  
  6.   `email` varchar(255) NOT NULL,  
  7.   UNIQUE KEY `id` (`id`)  
  8.   ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 

并插入一些初始數(shù)據(jù)

  1. INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES  
  2.  (1, 'david''12345''david@domain.com'),  
  3.  (2, 'maria''464y3y''maria@domain.com'), (3, 'alejandro''a42352fawet''alejandro@domain.com'),  
  4.   (4, 'emma''f22a3455b2''emma@domain.com' 

接下來,編寫控制層的測試文件,命名為test.php,保存在application/controller目錄下,代碼如下:

  1. class Test extends CI_Controller{  
  2.   function __construct(){  
  3.   parent::__construct();  
  4.   $this->load->helper(array('datagrid','url'));  
  5.   $this->Datagrid = new Datagrid('users','id');  
  6.   }  
  7.   function index(){  
  8.   $this->load->helper('form');  
  9.   $this->load->library('session');  
  10.   $this->Datagrid->hidePkCol(true);  
  11.   $this->Datagrid->setHeadings(array('email'=>'E-mail'));  
  12.   $this->Datagrid->ignoreFields(array('password'));  
  13.   if($error = $this->session->flashdata('form_error')){  
  14.   echo "$error";  
  15.   }  
  16.   echo form_open('test/proc');  
  17.   echo $this->Datagrid->generate();  
  18.   echo Datagrid::createButton('delete','Delete');  
  19.   echo form_close();  
  20.   }  
  21.   function proc($request_type = ''){  
  22.   $this->load->helper('url');  
  23.   if($action = Datagrid::getPostAction()){  
  24.   $error = "";  
  25.   switch($action){  
  26.   case 'delete' :  
  27.   if(!$this->Datagrid->deletePostSelection()){  
  28.   $error = 'Items could not be deleted';  
  29.   }  
  30.   break;  
  31.   }  
  32.   if($request_type!='ajax'){  
  33.   $this->load->library('session');  
  34.   $this->session->set_flashdata('form_error',$error);  
  35.   redirect('test/index');  
  36.   } else {  
  37.   echo json_encode(array('error' => $error));  
  38.   }  
  39.   } else {  
  40.   die("Bad Request");  
  41.   }  }  
  42.  }  
  43.  ?> 

下面簡單分析下這個測試類文件。首先在其構(gòu)造函數(shù)中,加載了編寫的datagrid數(shù)據(jù)表格helper文件和CI中的url helper類,并且通過

  1. $this->Datagrid = new Datagrid('users','id'); 

初始化了數(shù)據(jù)助手類的構(gòu)造方法,指定了表名是users,數(shù)據(jù)列為id。接著,通過

  1. $this->Datagrid->setHeadings(array('email'=>'E-mail')); 

設(shè)置了要顯示的表頭中,將email顯示為E-MAIL。并通過

  1. $this->Datagrid->ignoreFields(array('password')); 

設(shè)置了,在數(shù)據(jù)表格列中不顯示password一列。再接下來,則是調(diào)用generate()方法生成表格。而在proc()方法中,則負(fù)責(zé)處理用戶對選擇并刪除記錄的處理,而在if($request_type!='ajax'){ ……}的這段代碼中,則判斷是否屬于ajax調(diào)用,如果不屬于ajax調(diào)用,則正常返回出錯提示信息,否則則使用json_encode方法返回錯誤信息,這個技巧也是很常用的,之所以這樣做,其目的是為了能同時滿足ajax及非ajax的調(diào)用。

最后運行的效果如下圖:

 

 

 

整合jQuery加入AJAX功能

現(xiàn)在,我們可以為其加入AJAX功能了,這就要整合jQuery。由于本文不是初學(xué)者的教程,因此不會講解jQuery方面的知識,而是直接講解如何整合。首先新建一個文件夾,命名為js,然后里面放置jQuery的庫文件,并且新建立user.php文件,代碼如下:

  1. <html> 
  2. <head> 
  3.    <title>Users Management</title> 
  4.    <script src="<?php echo base_url(); ?>js/jquery-1.6.3.min.js"></script> 
  5.    <script src="<?php echo base_url(); ?>js/datagrid.js"></script> 
  6. </head> 
  7. <body> 
  8. <?php 
  9.       $this->Datagrid->hidePkCol(true);  
  10.       if($error = $this->session->flashdata('form_error')){  
  11.          echo "<font color=red>$error</font>";  
  12.       }  
  13.       echo form_open('test/proc',array('class'=>'dg_form'));  
  14.       echo $this->Datagrid->generate();  
  15.       echo Datagrid::createButton('delete','Delete');  
  16.       echo form_close();  
  17. ?> 
  18. </body> 
  19. </html> 

由于我們這里是采用ajax的方式去判斷用戶選擇表中的哪些記錄并且響應(yīng)刪除按鈕的事件,所以只保留上面的php代碼,而同時,在js目錄下新建立一個js/datagrid.js文件,還要修改上文中的index 方法如下:

  1. function index(){  
  2.   $this->load->helper('form');  
  3.   $this->load->library('session');  
  4.   $this->load->view('users');  
  5.  } 

也可以修改相關(guān)的CSS樣式,例如:

  1. .dg_form table{  
  2.   border:1px solid silver;  
  3.   }  
  4.   .dg_form th{  
  5.   background-color:gray;  
  6.   font-family:"Courier New", Courier, mono;  
  7.   font-size:12px;  
  8.   }  
  9.   .dg_form td{  
  10.   background-color:gainsboro;  
  11.   font-size:12px;  
  12.   }  
  13.   .dg_form input[type=submit]{  
  14.   margin-top:2px;  
  15.  }  

在datagrid.js中,增加如下的函數(shù)方法:

  1. $(function() {  
  2.   $('.dg_form :submit').click(function(e){  
  3.   e.preventDefault();  
  4.   var $form = $(this).parents('form');  
  5.   var action_name = $(this).attr('class').replace("dg_action_","");  
  6.   var action_control = $('');  
  7.   $form.append(action_control);  
  8.   var post_data = $form.serialize();  
  9.   action_control.remove();  
  10.   var script = $form.attr('action')+'/ajax';  
  11.   $.post(script, post_data, function(resp){  
  12.   if(resp.error){  
  13.   alert(resp.error);  
  14.   } else {  
  15.   switch(action_name){  
  16.   case 'delete' :  
  17.   //將已刪除的數(shù)據(jù)在數(shù)據(jù)表格中移走  
  18.   $form.find('.dg_check_item:checked').parents('tr').remove();  
  19.   break;  
  20.   case 'anotherAction' :  
  21.   ..  
  22.   break;  
  23.   }  
  24.   }  
  25.   }, 'json')  
  26.   })  
  27.   })  

在上面的代碼中,首先通過 var $form = $(this).parents('form');獲得了表單的名,然后通過

  1. var action_name = $(this).attr('class').replace("dg_action_","") 

獲得action的名稱,而

  1. var action_control = $('');  
  2.   $form.append(action_control);  

則是動態(tài)生成隱藏域action_control,通過$form.append(action_control)添加到表單中去。

接下來,我們將客戶端的數(shù)據(jù)通過 $.post(script, post_data, function(resp)發(fā)送到服務(wù)端,其中script變量定義了ajax發(fā)送的路徑,

Post_data則為通過$form.serialize()序列化后的表單數(shù)據(jù)。然后,在其回調(diào)函數(shù)的返回值中,判斷resp是否包含了錯誤信息,如果包含了錯誤信息則通過alert顯示,然后再在數(shù)據(jù)表格中,使用

  1. $form.find('.dg_check_item:checked').parents('tr').remove(); 

一句代碼,將服務(wù)端已刪除的數(shù)據(jù)行在數(shù)據(jù)表格中移走。

最后,我們再添加如下代碼

  1. $('.dg_check_toggler').click(function(){  
  2.   var checkboxes = $(this).parents('table').find('.dg_check_item');  
  3.   if($(this).is(':checked')){  
  4.   checkboxes.attr('checked','true');  
  5.   } else {  
  6.   checkboxes.removeAttr('checked');  
  7.   }  
  8.   })  

這段代碼的意思是,當(dāng)用戶選擇了表格中的“全選”按鈕時,將會尋找表格中所有每一行記錄前的checkbox(存放到變量checkboxes中),然后如果用戶在全選的checkbox框中勾選了的話,則通過jQuery設(shè)置所有記錄前的checkbox的attr屬性為true,即實現(xiàn)了全選的功能,反之則為取消全選。

小結(jié)

本文使用了php中的著名開發(fā)框架CI以及jQuery,指導(dǎo)讀者如何構(gòu)建了一個通用的數(shù)據(jù)表格幫助類,并且擁有ajax的功能(借助jQuery實現(xiàn))。讀者從中可以學(xué)到不少CI框架以及jQuery的技巧和知識。

原文:http://tech.it168.com/a2011/1027/1264/000001264981_all.shtml

【編輯推薦】

  1. 使用jQuery設(shè)計數(shù)據(jù)表格之設(shè)計表格基類
  2. 從零開始學(xué)習(xí)jQuery之萬能的選擇器
  3. 7月20款最新且極具創(chuàng)意的jQuery插件(附下載)
  4. 從零開始學(xué)習(xí)jQuery之Ajax快餐
  5. 一些應(yīng)該熟記于心的jQuery函數(shù)和技巧
責(zé)任編輯:陳貽新 來源: it168
相關(guān)推薦

2011-10-25 09:52:56

jQuery

2017-08-10 13:43:00

大數(shù)據(jù)數(shù)據(jù)表格優(yōu)化設(shè)計

2009-05-20 14:49:16

ibmdwAjaxWeb開發(fā)

2012-02-08 17:01:36

2011-05-19 11:01:14

ERWin數(shù)據(jù)庫設(shè)計

2011-01-24 13:20:49

2024-07-26 10:50:51

SpringScrew數(shù)據(jù)庫

2011-01-26 08:59:11

jQueryjavascriptweb

2009-06-26 13:46:13

Struts

2017-10-11 18:17:06

大數(shù)據(jù)數(shù)據(jù)可視化前后端

2009-08-07 09:57:20

Ajax分頁功能

2009-08-04 11:22:07

ASP.NET數(shù)據(jù)導(dǎo)入

2011-05-18 13:43:52

jQueryAjaxPHP

2023-01-13 18:32:40

計數(shù)系統(tǒng)設(shè)計

2011-05-18 13:28:46

jQueryPHPAJAX

2011-04-14 10:08:04

AJAXPHPJQuery

2011-03-02 11:23:48

2013-12-02 14:40:03

jQueryAjax

2009-09-09 11:24:13

Linq使用數(shù)據(jù)表

2021-04-26 10:47:54

AJAXDjango前端
點贊
收藏

51CTO技術(shù)棧公眾號