我有一个链接数据库,用户可以提交。每次用户提交新链接时,都会将其添加到数据库中。我有一个单独的网页,列出所有提交的链接。如何让这个单独的页面检查数据库中的更改,并在找到更改时用ajax加载它们?
最佳答案
根据数据库内容需要更新的页面必须每隔一段时间轮询数据库。javascript是一种客户端技术,不是为直接与后端服务器交互而设计的。
javascript如下所示(使用jquery):
$.post("/webroot/checkForChanges.php",
{ currentNumber: currNumString },
function(dat){
$(dat).find('link').each( function() {
$('#linksTable').append(""+$(this).text()+"");
});
});
这将向您要编写的页面(checkforchanges.php)发出post请求,该页面使用名为currentnumber的变量,该变量的值是表中当前链接数的字符串表示形式(根据您的喜好计算这些链接数)。
代码的函数(dat)部分是回调函数,在请求完成时运行(即php页面完成处理并将结果文本接收到浏览器中时)。
当我解释了php页面正在做什么之后,我将回到这一步。
您没有告诉我们任何关于您的数据库结构的信息,但是由于您成功地允许人们添加链接,因此您必须在某个地方定义一个序列,该序列跟踪链接的整数ID(以便在数据库中为每个链接提供唯一的ID)。我想你已经把这个叫做“链接计数”
您应该使用以下伪代码创建一个简单的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追加一个新的表行,linkstable包含链接标记中的数据。