代码之家  ›  专栏  ›  技术社区  ›  backus sompnd

使用php+jquery-ajax检查mysql数据库的更改并加载更改?

  •  7
  • backus sompnd  · 技术社区  · 17 年前

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

    2 回复  |  直到 11 年前
        1
  •  14
  •   sillyMunky    17 年前

    需要根据数据库内容进行更新的页面必须每隔一段时间轮询一次数据库。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。

        2
  •  0
  •   Allen Liu    17 年前

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