使用jquery从mysql获取数据

时间:2011-01-13 23:51:05

标签: jquery mysql

我想从mySQL中获取一些数据而不使用jQuery刷新页面。如果更新了mysql表中的任何记录,有人可以告诉我如何获取数据。例如,以下代码从数据库中获取一个数字计数,如果有人在数据库中添加了一个数字并且它已更新,那么如何在没有页面刷新的情况下显示新数字?感谢。

<?
$query  = "SELECT number, name FROM members WHERE id=1";
$result = mysql_query($query);

$row = mysql_fetch_array($result);
$number = $row['number'];    ?>

2 个答案:

答案 0 :(得分:3)

已经提到过两次,但我仍然想强调它。您永远不会希望客户端能够直接访问数据库。这是一个严重的安全风险。

现在解决方案。首先,您需要设置一个可以使用ajax请求的PHP文件。我们称之为check.php,它看起来像这样:

<?php
// include necessary files to enable connection to the database
$query  = "SELECT number, name FROM members WHERE id=1";
$result = mysql_query($query);

$row = mysql_fetch_array($result);
$number = $row['number'];

// send correct content type header of json
header("Content-Type", "application/json");

// we create an array, and encode it to json
// then echo it out while killing the script
die(json_encode(array('numbers'=>$number)));

现在进入JavaScript。解决方案类似于Kyle Humfeld,但不会使用setInterval,因为这是一个非常糟糕的做法。这背后的原因是因为setInterval不关心你的ajax调用的状态,如果它已经完成了。因此,如果服务器出现问题,您最终可能会收到堆叠请求,但这并不好。

为了防止出现这种情况,我们改为使用success的组合 - ajax方法的回调(.getJSON本质上是.ajax的简写)和setTimeout创建一个名为polling的东西:

$(function(){
    // placeholder for request
    var request = null;

    // request function
    var check = function() {
        request = $.getJSON('check.php', function(data){
            // this will log the numbers variable to the dev console
            console.log(data.numbers);
            // initiate a timeout so the same request is done again in 5 seconds
            setTimeout(check, 5000);
        });
    });

    // initiate the request loop
    check();

    // if you want to cancel the request, just do request.abort();
});

此外,还有一个更高级的解决方案,使用comet server将数据从服务器推送到客户端,但在挖掘彗星之前,您应该尝试先使用上述工具。如果你想阅读这个主题,我建议你看一下APE

答案 1 :(得分:0)

正如@Pekka所提到的,你需要对执行db调用的PHP页面进行AJAX调用。但是,看起来您的问题比这更复杂,因为您想要在插入新记录时定期检查并更新(部分?)您的页面,对吗?

如果是这样,您应该可以使用setInterval()来执行此操作。它是一个原生的javascript函数,基本上只是设置一个间隔(以毫秒为单位),然后运行一些代码。使setInterval()setTimeout()不同的是setInterval()重复运行,直到您告诉它停止(使用clearInterval())。

因此,您可以使用它每30秒(或您喜欢的任何方式)进行AJAX调用,以查找新记录并相应地更新结果div。