`
JAVA海洋
  • 浏览: 618207 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

在AJAX开发中集成数据库技术

阅读更多
  一、引言

  如今,有相当多的Web应用程序,如Backpack,Blinksale和Gmail,都把数据库技术与AJAX集成到一起。通过提供与数据库通讯而不用刷新浏览器这种强有力的技术,这种集成对web应用程序和用户体验产生巨大的影响-这意味着,在用户继续其它交互的同时可以实现实时的数据传输。

  本文将集中讨论上述技术集成机理。同时提供了完整的参考源码。这个示例是一个简单的职务记录应用程序,其中每个职务包含一个标题,描述和日期-允许用户添加、编辑和删除职务。所有这些都是你与数据库记录数据打交道时的基本操作,但是这个应用程序更进了一步。一个职务可以变化成一个可编辑的表单-它将被从数据库中加以保存或删除,以及以其新状态显示而不需要刷新浏览器并中断用户操作。

  在本文中,我假定你已经初步了解AJAX、MySQL和PHP,或一类似的服务器端语言。如果你还没有创建过XML HTTP Request对象,那么可以先参考我的文章“怎样使用AJAX”。下面,首先让我们讨论数据库的问题。

  二、创建数据库


  你需要做的第一件事是创建数据库表来为这些职务存储数据。我创建了一个叫informit_ajax的MySQL表-它拥有ID,title,description和date字段-这些都是在本文中不断重复出现的变量。下面是创建该表的代码:

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

  你可以用任何MySQL查询工具或开发应用程序所用的语言来执行这段代码。一旦准备好数据库,接下来就需要创建向PHP后台发出请求的前端文件。

  三、发出请求

  这里的索引HTML文件是一简单的数据占位符-它将被从数据库中加以分析。该文件包含到JavaScript和CSS文件的参考;还包含一个发出首次请求的onload处理器和三个div标签:

  · Layout-用于把页面内容居中

  · loading-在被请求的数据加载期间加载消息,它将为HTTPRequest对象所接收

  · posts-用于显示每一个分析后的职务数据

<head>
<title>How to Integrate a Database with AJAX</title>
<link href="css/layout.css" rel="stylesheet" type="text/css" />
<script src="js/request.js"></script>
<script src="js/post.js"></script>
</head>
<body onload="javascript:makeRequest('services/post.php?method=get');">
<div id="layout" align="center">
<div id="posts"></div>
<p><input type="button" value="add a post" onmousedown="javascript:makeRequest('services/post.php?method=save');" /></p>
<p><div id="loading"></div></p>
</div>

</body>

  当页面装载时产生第一个请求。这个请求发送一个get查询到一个我们稍后会创建的PHP类;但是首先我们需要为请求的响应创建分析方法。JavaScript请求文件负责处理所有的基础工作,例如创建对象,发送请求以及检查准备状态等。当从Request对象收到响应时,我用这个JavaScript职务文件来处理这些职务的HTML生成。onResponse方法是相当强壮的,因为它以文本和表单两种版本处理每个职务的HTML页面生成,并且把它们放置到它们自己定制的div标签中;这样以来,我们就可以容易地在用户交互期间定位它们。通过这种方法,我们可以在每个职务的文本和表单版本之间进行切换-这可以通过点击一个"edit this post"链接来实现。下面是针对每个职务创建的HTML页面的代码,你可以在本文相应的下载源文件中看到完整的方法实现。

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

  每个职务的文本版本简单地显示标题,描述和日期以及一个"edit this post"链接。每个职务的表单版本有三个按钮:

  ·"cancel"按钮-简单地把职务的状态切换回文本版本。

  ·"delete this post"按钮-把当前职务的ID发送给PHP对象以从数据库中把它删除。

  ·"save this post"按钮-允许用户把新的或编辑过的职务保存到服务器。

  处理服务器端请求通讯的核心方法有onResponse,saveNewPost,deletePost和getPost方法;还有存储当前正操作的职务索引的一个getter和一个setter方法。这些getter/setter方法把当前索引值提供给这些核心方法,这样正确的职务就可以用基于该索引的正确信息进行更新。下面是针对每个核心方法(不包括onResponse,因为我们以前观察过它的功能)的简短描述和代码示例:

  · 下面的saveNewPost方法通过收集并把表单输入值发送给PHP对象来保存新的职务并且把getPost方法设置为onreadystatechange的回叫方法:

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

  · 下面的getPost方法是一个回调方法-它负责当从PHP对象收到响应时更新单独的职务:

function getPost(){
 if(checkReadyState(request)) {
  var response = request.responseXML.documentElement;
  var _title = response.getElementsByTagName('title')[getIndex()].firstChild.data;
  var _description = response.getElementsByTagName('description')[getIndex()].firstChild.data;
  var _date = response.getElementsByTagName('date')[getIndex()].firstChild.data;

  document.getElementById("title_"+ getIndex()).innerHTML = _title;
  document.getElementById("description_"+ getIndex()).innerHTML = _description;
  document.getElementById("date_"+ getIndex()).innerHTML = _date;
  toggle(getIndex());
 }
}

  · 下面的deletePost方法把当前索引作为一个请求发送给PHP对象,这最终将删除数据库中的记录并以更新的职务进行响应:

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


  令人惊讶的是,最复杂的部分已经结束了。下面让我们分析最为关键的部分-数据库交互。

 四、与数据库交互

  为了实现与数据库的交互,你需要创建方法用于检索,插入,代替和删除职务。我选择创建一个post类,其中有get,save和delete方法来处理这些交互。这个类还有一个到数据库连接文件(用于连接到数据库)的参考。你必须用自己的数据库信息来代替登录,口令和数据库名。

DEFINE ('DB_USER', 'USERNAME');
DEFINE ('DB_PASSWORD', 'PASSWORD');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'DATABASE');
$dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Could not connect to MySQL: ' . mysql_error() );

  到连接文件的参考以及数据库的名字位于该类的构造器中。你的构造器看上去应该与下面代码相似:

function Post(){
 require_once('mysql_connect.php');
 $this->table = "informit_ajax";
}

  下面的dbConnect方法负责创建连接-通过把登录信息传送给数据库;这个方法被重用于查询数据库前的所有核心方法中:

function dbConnect(){
 DEFINE ('LINK', mysql_connect (DB_HOST, DB_USER, DB_PASSWORD));
}

  下面的get方法循环遍历数据库表,它基于数据库行创建一个XML字符串,并把该字符串返回给请求者:

function get(){
 $this->dbConnect();
 $query = "SELECT * FROM $this->table ORDER BY id";
 $result = mysql_db_query (DB_NAME, $query, LINK);
 $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
 $xml .= "<posts>\n";
 while($row = mysql_fetch_array($result)) {
  $xml .= "<post>\n";
  $xml .= "<id>" . $row['id'] . "</id>\n";
  $xml .= "<date>" . $row['date'] . "</date>\n";
  $xml .= "<title><![CDATA[" . $row['title'] . "]]></title>\n";
  $xml .= "<description><![CDATA[" . $row['description'] . "]]></description>\n";
  $xml .= "</post>\n";
 }
 $xml .= "</posts>";
 mysql_close();
 header("Content-Type: application/xml; charset=UTF-8");
 echo $xml;
}

  下面的save方法通过处理更新和插入位置实现两个目的:

function save($id, $title, $description){
$this->dbConnect();
$query = "SELECT * FROM $this->table WHERE id='$id'";
$result = @mysql_query ($query);
if (mysql_num_rows($result) > 0)
{
 $query = "UPDATE $this->table SET title='$title', description='$description', date=NOW() WHERE id='$id'";
 $result = @mysql_query($query);
}
else
{
 $query = "INSERT INTO $this->table (title, description, date) VALUES ('$title', '$description', NOW())";
 $result = @mysql_query($query);
}
mysql_close();
$this->get();
}

  下面的delete方法负责删除一个基于被作为参数传递的ID的位置。然后调用get方法来把新的数据返回到请求文件:

function delete($id){
 $this->dbConnect();
 $query = "DELETE FROM $this->table WHERE id='$id'";
 $result = @mysql_query($query);
 mysql_close();
 $this->get();
}

  五、综合应用

  为了把以上各部分整合到一起,需要创建一个简单的文件来承担XML HTTP请求和PHP对象之间的通讯桥梁。这时的页面不仅创建PHP对象,还接收查询并把变量传递给动态生成的方法-在此是指get,save或delete。下面的一个示例查询包括了一个$method和可靠的$id,$title和$description变量。

require_once("../classes/Post.class.php");
$post = new Post();
$post->$method($id, $title, $description);

  以后我们还会更进一步讨论这些技术。如今的web开发看起来再次变得年轻而充满活力,而我们也很幸运地成为这种新技术时代的一部分。
分享到:
评论

相关推荐

    ajax实例

    在`在 AJAX 开发中集成数据库技术`的相关文档中,我们将学习如何将Ajax与后端数据库连接起来,以获取、更新或删除数据。这通常涉及服务器端的编程,如PHP或Node.js,它们负责处理数据库查询并返回JSON或XML格式的...

    ajax+ashx+分页 包含数据库文件

    【标题】"ajax+ashx+分页 包含数据库文件"所涉及的知识点主要集中在Web开发中的异步数据处理和页面动态加载技术上。这里的"ajax"是"Asynchronous JavaScript and XML"的缩写,是一种在不刷新整个网页的情况下,能够...

    ASP源码—AJAX+ACCESS数据库操作实例源码.zip

    在本实例中,我们看到的"ASP源码—AJAX+ACCESS数据库操作实例源码.zip"是一个包含ASP技术与AJAX(Asynchronous JavaScript and XML)以及ACCESS数据库交互的源代码压缩包。这个实例可能是一个教学资源或实际项目中的...

    C# ajax和数据库连接池小实例

    3. C#与Ajax集成:在ASP.NET中,可以使用ScriptManager控件启用Ajax功能,然后通过UpdatePanel或自定义脚本来实现异步更新。C#后台代码处理Ajax请求,返回JSON或XML数据,JavaScript前端解析并更新DOM。 二、数据库...

    AJAX无刷新(数据库版)

    服务器端接收到请求后,执行相应的SQL查询,从数据库中获取所需数据。数据可以是JSON格式,因为JSON比XML更轻量且易于处理。服务器将查询结果转化为JSON格式,并通过HTTP响应返回给客户端。 在本案例中,我们提到了...

    Web数据库技术实用教程

    《Web数据库技术实用教程》是一本深入探讨如何在Web环境下集成和管理数据库的教材。它主要面向希望了解和掌握Web数据库应用开发的初学者和专业人士。Web数据库技术是现代互联网应用的重要组成部分,它使得用户可以...

    ajax n级联动数据库版(带后台和省市县数据库) v1.0.0 utf-8-ASP源码.zip

    3. **数据库**:这个系统与数据库紧密集成,意味着数据存储在后台数据库中,当用户进行选择时,会通过AJAX向服务器发送请求,从数据库中获取并返回相应的数据。 4. **utf-8编码**:这是国际标准的Unicode字符编码,...

    ajax+php+oracle数据库web开发源码

    【标题解析】 "ajax+php+oracle数据库web开发源码"这个标题表明这是一个关于Web开发的项目,其中使用...通过深入研究这个源码,开发者可以学习到实际项目中的Ajax、PHP和Oracle数据库集成应用,提升自己的Web开发技能。

    Ajax 开发实例(c#)

    这个实例旨在帮助开发者理解如何在C#环境中使用Ajax技术,通过实践来掌握Ajax的实现原理和技巧,提高Web应用程序的性能和用户体验。在实际开发中,开发者可以根据需求进行调整和扩展,以满足更复杂的业务场景。

    JSP数据库开发实例精粹.pdf

    本书的核心内容围绕着JSP与数据库的集成,为读者提供丰富的实践案例,帮助开发者提升在Web开发中的数据处理能力。 首先,书中的实例涵盖了JDBC(Java Database Connectivity)的基本使用,这是JSP与数据库交互的...

    ASP.NET与相关数据库技术高级指南-源代码

    此“ASP.NET与相关数据库技术高级指南-源代码”资料涵盖了ASP.NET的核心概念、编程实践以及数据库集成的关键技术,旨在帮助开发者深入理解并提升在ASP.NET平台上的开发技能。 首先,ASP.NET提供了多种开发模型,如...

    visual studio2008开发ajax实例(附带图文解说)

    在 Web 开发领域,VS2008 提供了对 AJAX(Asynchronous JavaScript and XML)技术的全面支持,帮助开发者创建高性能、交互性强的网页应用程序。本实例将引导你了解如何使用 VS2008 结合 AJAX 技术进行开发,同时配合...

    Ajax三层个人网站小程序(vs05含数据库)

    5. **Model**:模型层通常包含业务对象,这些对象对应数据库中的表或视图,封装了业务实体的相关属性和方法。在本项目中,Model层可能包含定义了个人网站数据模型的类。 6. **DALDataSet**:在.NET框架中,DataSet...

    Asp.net考试系统(Ajax技术+源码+数据库)

    6. **源码分析**:提供的源码可以帮助开发者理解系统的架构和实现细节,学习如何在实际项目中应用Asp.NET和Ajax技术。源码通常包括HTML、CSS、JavaScript、C#或VB.NET文件,以及数据库脚本。 7. **部署与配置**:...

    使用JSP/Servlet/Ajax技术开发新闻发布系统

    总结,"使用JSP/Servlet/Ajax技术开发新闻发布系统"涉及到的技术栈广泛,包括前后端交互、数据库操作、MVC设计模式等多个方面,开发者需要掌握这些技能才能成功构建出高效、用户体验良好的新闻发布平台。

    Delphi开发B_S数据库应用系统教程_delphi_DelPhi开发B/S_delphiBS_Delphi开发BS

    本教程主要聚焦于使用Delphi进行B/S(浏览器/服务器)数据库应用系统的开发,这在当今互联网环境中具有广泛的应用场景。 一、Delphi简介 Delphi是由Embarcadero Technologies公司开发的集成开发环境(IDE),它基于...

    dot NET数据库开发技术

    本文将深入探讨dot NET数据库开发技术,涉及Ajax、ASP.NET、C#、J2EE和Java等关键标签,并结合压缩包内的文件内容,详细解析数据库操作、XML编程、SQL Server XML功能、NHibernate高级数据映射和查询,以及事务、...

    PHP+Ajax Web 2.0编程技术与项目开发大全(真正的随书光盘)

    此外,还将深入探讨PHP在Web开发中的实际应用,例如表单处理、会话管理、安全防范(如SQL注入和XSS攻击)以及与其他服务器端技术的整合。 Ajax,即Asynchronous JavaScript and XML,是一种创建交互式网页应用的...

    高效基于Django框架的员工管理系统源码,集成MySQL数据库与HTML/CSS/JS/AJax前端技术

    项目概述:本高效员工管理系统基于Python的Django框架开发,集成了MySQL数据库以确保数据存储的稳定性和可靠性。前端采用HTML、CSS、JavaScript以及Ajax技术,实现了用户界面的交互性和动态内容更新。整个项目包含...

Global site tag (gtag.js) - Google Analytics