我有一个用户可以提交的链接数据库。每次用户提交新链接时,都会将其添加到数据库中。我有一个单独的页面,列出了所有提交的链接。如何让这个单独的页面检查数据库是否有变化,并在找到它们时用AJAX加载它们?
答案 0 :(得分:14)
需要根据数据库内容进行更新的页面必须经常轮询数据库。 Javascript是一种客户端技术,不适合直接与后端服务器交互。
javascript看起来像这样(使用jquery):
$.post("/webroot/checkForChanges.php",
{ currentNumber: currNumString },
function(dat){
$(dat).find('link').each( function() {
$('#linksTable').append(""+$(this).text()+"");
});
});
这将向您要编写的页面发出POST请求(checkForChanges.php),其中包含名为currentNumber的变量,该变量的值是表中当前链接数的字符串表示形式(根据您的喜好计算这些)
代码的函数(dat)部分是在请求完成时运行的回调函数(即php页面处理完毕并且结果文本已经被接收到浏览器中)。
当我解释PHP页面正在做什么时,我会回到这里做的事情。
您没有告诉我们您的数据库结构,但由于您成功地允许人们添加链接,您必须在某处定义一个序列,以跟踪链接的整数ID(以便可以给出每个链接)数据库中的唯一ID)。我假设你称之为'links-count' 您应该使用以下伪代码创建一个简单的php页面:
//open a database connection
$DB = connect( name, user, password );
//receive value
$currNum = $_POST['currentNumber'];
//check to see if sequence number has incremented since last time:
$seqNum = query( "SELECT currval('links-count')" );
if ($seqNum == $currNum){
exit(0);
} //if they are the same, just exit the page without writing anything
//otherwise, carry on... get the result of your query (for new links)
//and loop through, echoing return data
$newEntries = query("SELECT url FROM links WHERE id > ".$currNum);
echo "<newlinks>";
while ( $result = fetch_result( $newEntries ) ) {
echo "<link><a>".$result."</a></link>";
}
echo "</newlinks>";
此页面返回的输出将是一个xml文档,其中包含每个链接的节点,其中包含要放入表格单元格中的HTML。
现在我们可以回到客户端java代码中的$ .post请求中的回调函数:
function(dat){
$(dat).find('link').each( function() {
$('#linksTable').append(""+$(this).text()+"");
});
});
dat是返回的文本,将其包装为jquery对象,然后找到名为“link”的标记集合。对于php页面返回的每个'link'标签,执行一个函数,将新表行附加到linksTable,其中包含链接标签内的数据。
答案 1 :(得分:0)
您可以在单独的页面上拥有一个活动的javascript,它基本上会轮询数据库以进行更改,或者您可以在成功提交后执行回调功能。我不确定这里发生什么,所以我真的不知道该推荐什么。