使用PHP+jQuery AJAX检查MySQL数据库的更改并加载更改?

7

我有一个链接数据库,用户可以提交链接。每次用户提交新链接时,它都会被添加到数据库中。我有一个单独的页面列出了所有提交的链接。当这个单独的页面发现数据库有变化时,如何使用AJAX加载它们?

2个回答

14

需要根据数据库内容更新的页面必须定期轮询数据库。JavaScript是客户端技术,不适用于直接与后端服务器进行交互。

JavaScript代码如下(使用jQuery):


$.post("/webroot/checkForChanges.php", 
        { currentNumber: currNumString },
        function(dat){
            $(dat).find('link').each( function() {
                $('#linksTable').append(""+$(this).text()+"");
            });
});
这将使用名为currentNumber的变量向您编写的页面(checkForChanges.php)发出POST请求,该变量的值是表中当前链接数量的字符串表示形式(您可以按任何方式计算这些链接)。
代码中的函数(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中附加包含链接标记内数据的新表行。


1
嗯,这是一个相当完整的答案,我花了一些时间……bballbackus,你试过了吗?你能接受或投票支持它,或者至少在评论中给一些反馈吗?谢谢。 - sillyMunky

0

您可以在单独的页面上拥有一个活动的JavaScript,基本上轮询数据库以获取更改,或者在成功提交后使用回调函数执行此操作。我不确定正在发生什么,所以不知道该推荐什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接