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

在AJAX開發(fā)中集成數(shù)據(jù)庫技術(shù)

運維 數(shù)據(jù)庫運維
AJAX在本質(zhì)上是一個瀏覽器端的技術(shù),而在AJAX開發(fā)中集成數(shù)據(jù)庫技術(shù)是怎樣的,下面就帶著大家去學(xué)習(xí)一下這先進(jìn)的技術(shù),一睹為快。

一、引言

       AJAX首先面臨無可避免的第一個問題即是瀏覽器的兼容性問題,而在在AJAX開發(fā)中集成數(shù)據(jù)庫技術(shù)就是把二者的兼容前來,此時,這個兼容性就是至關(guān)重要的一個環(huán)節(jié)。

  如今,有相當(dāng)多的Web應(yīng)用程序,如Backpack,Blinksale和Gmail,都把數(shù)據(jù)庫技術(shù)與AJAX集成到一起。通過提供與數(shù)據(jù)庫通訊而不用刷新瀏覽器這種強(qiáng)有力的技術(shù),這種集成對web應(yīng)用程序和用戶體驗產(chǎn)生巨大的影響-這意味著,在用戶繼續(xù)其它交互的同時可以實現(xiàn)實時的數(shù)據(jù)傳輸。

  本文將集中討論上述技術(shù)集成機(jī)理。同時提供了完整的參考源碼。這個示例是一個簡單的職務(wù)記錄應(yīng)用程序,其中每個職務(wù)包含一個標(biāo)題,描述和日期-允許用戶添加、編輯和刪除職務(wù)。所有這些都是你與數(shù)據(jù)庫記錄數(shù)據(jù)打交道時的基本操作,但是這個應(yīng)用程序更進(jìn)了一步。一個職務(wù)可以變化成一個可編輯的表單-它將被從數(shù)據(jù)庫中加以保存或刪除,以及以其新狀態(tài)顯示而不需要刷新瀏覽器并中斷用戶操作。

  在本文中,我假定你已經(jīng)初步了解AJAX、MySQL和PHP,或一類似的服務(wù)器端語言。如果你還沒有創(chuàng)建過XML HTTP Request對象,那么可以先參考我的文章“怎樣使用AJAX”。下面,首先讓我們討論數(shù)據(jù)庫的問題。

二、創(chuàng)建數(shù)據(jù)庫

  你需要做的第一件事是創(chuàng)建數(shù)據(jù)庫表來為這些職務(wù)存儲數(shù)據(jù)。我創(chuàng)建了一個叫informit_ajax的MySQL表-它擁有ID,title,description和date字段-這些都是在本文中不斷重復(fù)出現(xiàn)的變量。下面是創(chuàng)建該表的代碼:

 

  1. CREATE TABLE ′informit_ajax′ (  
  2. ′id′ int(11) NOT NULL auto_increment,  
  3. date′ datetime NOT NULL default '0000-00-00 00:00:00',  
  4. ′description′ longtext NOT NULL,  
  5. ′title′ varchar(100) NOT NULL default '',  
  6. PRIMARY KEY (′id′)  
  7. ) TYPE=MyISAM;   

  你可以用任何MySQL查詢工具或開發(fā)應(yīng)用程序所用的語言來執(zhí)行這段代碼。一旦準(zhǔn)備好數(shù)據(jù)庫,接下來就需要創(chuàng)建向PHP后臺發(fā)出請求的前端文件。

三、發(fā)出請求

  這里的索引HTML文件是一簡單的數(shù)據(jù)占位符-它將被從數(shù)據(jù)庫中加以分析。該文件包含到JavaScript和CSS文件的參考;還包含一個發(fā)出首次請求的onload處理器和三個div標(biāo)簽:

  -用于把頁面內(nèi)容居中

  -在被請求的數(shù)據(jù)加載期間加載消息,它將為HTTPRequest對象所接收

  -用于顯示每一個分析后的職務(wù)數(shù)據(jù)

 

  1. <head>  
  2. <title>How to Integrate a Database with AJAX</title>  
  3. <link href="css/layout.css" rel="stylesheet" type="text/css" />  
  4. <script src="js/request.js"></script>  
  5. <script src="js/post.js"></script>  
  6. </head>   
  7. <body onload="javascript:makeRequest('services/post.php?method=get');">  
  8. <div id="layout" align="center">  
  9. <div id="posts"></div>  
  10. <p><input type="button" value="add a post" onmousedown="javascript:makeRequest('services/post.php?method=save');" /></p>  
  11. <p><div id="loading"></div></p>  
  12. </div>  
  13.  
  14. </body>   
  15.  

  當(dāng)頁面裝載時產(chǎn)生第一個請求。這個請求發(fā)送一個get查詢到一個我們稍后會創(chuàng)建的PHP類;但是首先我們需要為請求的響應(yīng)創(chuàng)建分析方法。JavaScript請求文件負(fù)責(zé)處理所有的基礎(chǔ)工作,例如創(chuàng)建對象,發(fā)送請求以及檢查準(zhǔn)備狀態(tài)等。當(dāng)從Request對象收到響應(yīng)時,我用這個JavaScript職務(wù)文件來處理這些職務(wù)的HTML生成。onResponse方法是相當(dāng)強(qiáng)壯的,因為它以文本和表單兩種版本處理每個職務(wù)的HTML頁面生成,并且把它們放置到它們自己定制的div標(biāo)簽中;這樣以來,我們就可以容易地在用戶交互期間定位它們。通過這種方法,我們可以在每個職務(wù)的文本和表單版本之間進(jìn)行切換-這可以通過點擊一個"edit this post"鏈接來實現(xiàn)。下面是針對每個職務(wù)創(chuàng)建的HTML頁面的代碼,你可以在本文相應(yīng)的下載源文件中看到完整的方法實現(xiàn)。

 

  1. var html = "<div class='post' id='post_"+ i +"' "+ postDisplay +">" 
  2. "<div class='title' id='title_"+ i +"'>"+ _title +"</div>" 
  3. "<div class='description' id='description_"+ i +"'>"+ _description +"</div>" 
  4. "<div class='date' id='date_"+ i +"'>"+ _date +"</div>" 
  5. "<a href=\"javascript:toggle('"+ i +"');\">edit this post</a><br/>" 
  6. "</div>" 
  7. "<div class='post' id='formPost_"+ i +"' "+ formPostDisplay +">" 
  8. "<div class='title'><input type='text' name='title' id='formTitle_"+ i +"' size='60' value='"+ _title +"'></div>" 
  9. "<div class='description'><textarea type='text' id='formDescription_"+ i +"' wrap='virtual' cols='60' rows='15'>"+ _description +"</textarea></div>" 
  10. "<div class='date'>"+ _date +"</div>" 
  11. "<input type='button' name='cancel' value='cancel' onclick=\"javascript:toggle('"+ i +"');\">" 
  12. "<input type='button' name='delete' value='delete this post' onclick=\"javascript:deletePost("+ _id +");\">" 
  13. "<input type='button' name='submit' value='save this post' onclick=\"javascript:saveNewPost("+ _id +","+ i +");\">" 
  14. "</div>" 
  15. "<p>"nbsp;</p>";   

  每個職務(wù)的文本版本簡單地顯示標(biāo)題,描述和日期以及一個"edit this post"鏈接。每個職務(wù)的表單版本有三個按鈕:

  1、"cancel"按鈕-簡單地把職務(wù)的狀態(tài)切換回文本版本。

  2、"delete this post"按鈕-把當(dāng)前職務(wù)的ID發(fā)送給PHP對象以從數(shù)據(jù)庫中把它刪除。

  3、"save this post"按鈕-允許用戶把新的或編輯過的職務(wù)保存到服務(wù)器。

  處理服務(wù)器端請求通訊的核心方法有onResponse,saveNewPost,deletePost和getPost方法;還有存儲當(dāng)前正操作的職務(wù)索引的一個getter和一個setter方法。這些getter/setter方法把當(dāng)前索引值提供給這些核心方法,這樣正確的職務(wù)就可以用基于該索引的正確信息進(jìn)行更新。下面是針對每個核心方法(不包括onResponse,因為我們以前觀察過它的功能)的簡短描述和代碼示例:

   下面的saveNewPost方法通過收集并把表單輸入值發(fā)送給PHP對象來保存新的職務(wù)并且把getPost方法設(shè)置為onreadystatechange的回叫方法:

 

  1. function saveNewPost(_id, _index){  
  2.  var newDescription = document.getElementById("formDescription_"+ _index).value;  
  3.  var newTitle = document.getElementById("formTitle_"+ _index).value;  
  4.  setIndex(_index);  
  5.  sendRequest("services/post.php?method=save"id="+ _id +""title="+ newTitle +""description="+ newDescription, getPost);  
  6.    
  7.  

   下面的getPost方法是一個回調(diào)方法-它負(fù)責(zé)當(dāng)從PHP對象收到響應(yīng)時更新單獨的職務(wù):

 

  1. function getPost(){  
  2.  if(checkReadyState(request)) {  
  3.   var response = request.responseXML.documentElement;  
  4.   var _title = response.getElementsByTagName('title')[getIndex()].firstChild.data;  
  5.   var _description = response.getElementsByTagName('description')[getIndex()].firstChild.data;  
  6.   var _date = response.getElementsByTagName('date')[getIndex()].firstChild.data;  
  7.  
  8.   document.getElementById("title_"+ getIndex()).innerHTML = _title;  
  9.   document.getElementById("description_"+ getIndex()).innerHTML = _description;  
  10.   document.getElementById("date_"+ getIndex()).innerHTML = _date;  
  11.   toggle(getIndex());  
  12.  }  
  13. }   
  14.  

下面的deletePost方法把當(dāng)前索引作為一個請求發(fā)送給PHP對象,這最終將刪除數(shù)據(jù)庫中的記錄并以更新的職務(wù)進(jìn)行響應(yīng):

 

  1. function deletePost(_id){  
  2.  sendRequest("services/post.php?method=delete"id="+ _id, onResponse);  
  3. }   

 這些就是在AJAX開發(fā)中集成數(shù)據(jù)庫技術(shù)中最為復(fù)雜的部分,掌握了這些,其他的就是易如反掌,只要認(rèn)真學(xué)習(xí),其實也沒什么難的,重在理解。

【編輯推薦】

  1. 詳談基于JSON的高級AJAX開發(fā)技術(shù)
  2. 構(gòu)建ASP.NET AJAX開發(fā)環(huán)境
  3. 快速進(jìn)入Ajax開發(fā)的實例解說
責(zé)任編輯:迎迎 來源: 天極網(wǎng)
相關(guān)推薦

2009-05-14 14:23:25

微軟ado.netLINQ

2009-09-07 22:54:03

Linq組合查詢

2009-06-23 09:33:20

FCKEditorJSFJSP

2009-06-01 16:18:30

SpringJPA集成

2011-07-20 17:10:05

iPhone iAd

2011-04-07 15:02:02

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

2009-01-03 15:01:16

ibmdwLptus

2011-03-31 09:55:59

Oracle數(shù)據(jù)庫開發(fā)技術(shù)

2009-01-03 14:43:55

ibmdwPHPsMash

2014-09-28 14:53:39

滲透BurpSuiteSqlmap

2011-06-29 09:42:12

Visual Stud Qt Opensource

2018-01-02 08:30:45

IntelCPU

2010-05-07 14:29:45

Unix--Tripw

2021-05-10 09:22:44

.NET數(shù)據(jù)庫項目

2025-01-03 08:13:08

2016-04-20 09:47:40

MapBoxAndroid地圖

2009-06-11 13:28:18

Glassfish集成

2016-08-23 13:35:22

MVCEFNuGet

2012-10-18 10:12:42

IBMdw

2020-08-06 11:45:37

數(shù)據(jù)庫文檔Swagger
點贊
收藏

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