我有一个链接数据库,用户可以提交。每次用户提交新链接时,都会将其添加到数据库中。我有一个单独的网页,列出所有提交的链接。如何让这个单独的页面检查数据库中的更改,并在找到更改时用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包含链接标记中的数据。

09-27 00:57
查看更多