一、引言
如今,有相当多的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; |
| <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> |
| 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> " + "</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>"; |
| 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); } |
| 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()); } } |
| function deletepost(_id){ sendrequest("services/post.php?method=delete"id="+ _id, onresponse); } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器