在AJAX开发中集成数据库技术(1)(2)
处理服务器端请求通讯的核心方法有onResponse,saveNewPost,deletePost和getPost方法;还有存储当前正操作的职务索引的一个getter和一个setter方法。这些getter/set
处理服务器端请求通讯的核心方法有onResponse,saveNewPost,deletePost和getPost方法;还有存储当前正操作的职务索引的一个getter和一个setter方法。这些getter/setter方法把当前索引值提供给这些核心方法,这样正确的职务就可以用基于该索引的正确信息进行更新。下面是针对每个核心方法(不包括onResponse,因为我们以前观察过它的功能)的简短描述和代码示例:
下面的saveNewPost方法通过收集并把表单输入值发送给PHP对象来保存新的职务并且把getPost方法设置为onreadystatechange的回叫方法:
下面的getPost方法是一个回调方法-它负责当从PHP对象收到响应时更新单独的职务:
下面的deletePost方法把当前索引作为一个请求发送给PHP对象,这最终将删除数据库中的记录并以更新的职务进行响应:
到连接文件的参考以及数据库的名字位于该类的构造器中。你的构造器看上去应该与下面代码相似:
下面的dbConnect方法负责创建连接-通过把登录信息传送给数据库;这个方法被重用于查询数据库前的所有核心方法中:
下面的get方法循环遍历数据库表,它基于数据库行创建一个XML字符串,并把该字符串返回给请求者:
下面的save方法通过处理更新和插入位置实现两个目的:
下面的delete方法负责删除一个基于被作为参数传递的ID的位置。然后调用get方法来把新的数据返回到请求文件:
五、综合应用
为了把以上各部分整合到一起,需要创建一个简单的文件来承担XML HTTP请求和PHP对象之间的通讯桥梁。这时的页面不仅创建PHP对象,还接收查询并把变量传递给动态生成的方法-在此是指get,save或delete。下面的一个示例查询包括了一个$method和可靠的$id,$title和$description变量。
以后我们还会更进一步讨论这些技术。如今的web开发看起来再次变得年轻而充满活力,而我们也很幸运地成为这种新技术时代的一部分。
(责任编辑:铭铭)
下面的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()); } } |
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; } |
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(); } |
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); |
(责任编辑:铭铭)
精彩图集
精彩文章