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

Posted

技术标签:

【中文标题】使用 PHP+jQuery AJAX 检查 MySQL 数据库的更改并加载更改?【英文标题】:Use PHP+jQuery AJAX to check MySQL database for changes and load the changes? 【发布时间】:2010-11-14 12:41:48 【问题描述】:

我有一个用户可以提交的链接数据库。每次用户提交一个新链接时,它都会被添加到数据库中。我有一个单独的页面,列出了所有提交的链接。如何让这个单独的页面检查数据库的更改并在找到更改时使用 AJAX 加载它们?

【问题讨论】:

【参考方案1】:

需要根据数据库内容更新的页面必须经常轮询数据库。 javascript 是一种客户端技术,并不是为直接与后端服务器交互而设计的。

javascript 看起来像这样(使用 jquery):


$.post("/webroot/checkForChanges.php", 
         currentNumber: currNumString ,
        function(dat)
            $(dat).find('link').each( function() 
                $('#linksTable').append(""+$(this).text()+"");
            );
);

这将使用名为 currentNumber 的变量向您将写入的页面 (checkForChanges.php) 发出 POST 请求,该变量的值是表中当前链接数的字符串表示形式(根据您的喜好计数) .

代码的function(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 对象,然后找到名为“链接”的标签集合。对于 php 页面返回的每个“链接”标签,执行一个函数,该函数将一个新的表格行附加到包含链接标签内数据的 linksTable。

【讨论】:

嗯,这是一个非常完整的答案我花了一些时间... bballbackus,你试过了吗?您能否接受或投票支持它,或者至少在您的 cmets 中提供一些反馈?谢谢【参考方案2】:

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

【讨论】:

以上是关于使用 PHP+jQuery AJAX 检查 MySQL 数据库的更改并加载更改?的主要内容,如果未能解决你的问题,请参考以下文章

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

使用Jquery.AJAX方法和PHP后台数据交互小结

如何使用jquery ajax检查或不检查复选框[重复]

使用 ajax jquery php 和 mysql 制作账单

AJAX 实时电子邮件验证 (PHP)

使用 JQuery、PHP 和 MySQL 为实时统计页面优化多个连续的 ajax 调用