2014-12-06 86 views
0

我想用jQuery,php和mysql制作慈善计数器。 我试图从MySQL使用PHP每5秒获取新的值,而不更新页面使用'window.setInterval()',但我的问题是,它没有抓取新的值,但它始终使用它在开始得到的值。所以这里的代码,我希望有些人能够帮助:)。试图使用mysql和php更新jquery变量

window.setInterval(function(){ 
    var needed = <?php echo neededGetFirst(); ?>; 
    var got = <?php echo gotGetFirst(); ?>; 
    console.log('needed: ' + needed); 
    console.log('got: ' + got); 
    var gaugeHeight = 223; 
    var gaugeBottom = 318; 
    var percent = (100/needed) * got; 
    var heightOffset = (gaugeHeight/100) * percent; 
    var bottomOffset = gaugeBottom - (gaugeHeight - heightOffset); 

    $('#gauge').animate({ 
     height: heightOffset + 'px', 
     bottom: bottomOffset + 'px' 
    }, 1000); 

    for (var i = 2, limit = 7; i < limit; i++) { 
     var value = (needed/5) * (i - 1); 
     $('#stamp' + i).text(value); 
    }; 
}, 5000); 

编辑

是否有可能从一个文件中的一些类型的GET/RUN返回值?通过将php/mysql数据库函数放在一个文件中,并使用return作为值。'

EDIT 2

文件中使用PHP代码:

<?php 
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=thermometer', 'root', ''); 
    $sql = 'SELECT `got`.`value` AS got, `needed`.`value` AS needed FROM `needed`, `got`'; 
    $statement = $pdo->prepare($sql); 
    $statement->execute(); 
    $result = $statement->fetchAll(PDO::FETCH_ASSOC); 
    $json = json_encode($result); 
    echo($json); 
?> 
+4

你想访问window.setInterval中的服务器端值(得到的票数),你需要使用AJAX来做到这一点。您当前的代码当然会使用它在开始时获得的值,因为您在页面加载时回显“获得”值,没有任何代码可以刷新该值。 – Ananth 2014-12-06 16:21:45

回答

1

正如已经提到的,更新每然而,许多秒新值的页面,你会需要某种可能通过AJAX与服务器进行交互。

这里是你如何能做到这一点的例子:

function getNewValues(){ 
    return $.ajax({ 
    url: 'submit.php', 
    type: 'POST', 
    dataType: 'json', 
    cache: false 
    }); 
} 

window.setInterval(function(){ 
    getNewValues() 
    .success(function(data) { 
    var needed = data["needed"], 
     got = data["got"]; 

    var gaugeHeight = 223; 
    var gaugeBottom = 318; 
    var percent = (100/needed) * got; 
    var heightOffset = (gaugeHeight/100) * percent; 
    var bottomOffset = gaugeBottom - (gaugeHeight - heightOffset); 

    $('#gauge').animate({ 
     height: heightOffset + 'px', 
     bottom: bottomOffset + 'px' 
    }, 1000); 

    for (var i = 2, limit = 7; i < limit; i++) { 
     var value = (needed/5) * (i - 1); 
     $('#stamp' + i).text(value); 
    }; 
    }) 
    .fail(function() { 
    console.log("An error ocurred"); 
    }); 
}, 500); 

现在,每五秒钟的请求将触发到服务器并检索最新的值。

你将不得不调整自己的PHP脚本返回一些简单的JSON:

{ 
    "needed": needed_value, 
    "got": got_value 
} 

也许是这样的:

<?php 
    $pdo = new PDO('mysql:host=host;dbname=db_name', 'user', 'pass'); 
    $sql = 'SELECT needed, got FROM table'; 
    $statement = $pdo->prepare($sql); 
    $statement->execute(); 
    $result = $statement->fetch(); 
    $json = json_encode($result); 
    echo($json); 
?> 

虽然这不是测试,它应该有希望点你的正确的道路。

+0

这是否可以使用左连接?如果是这样,你能写一个例子吗?因为服务器querry工作,但我必须从2个不同的表中获取数据 – Thaillie 2014-12-06 17:47:55

+0

无论如何,您必须获取数据,因为您正在页面上输出它。只需使用你拥有的。 – 2014-12-06 17:52:52

+0

我得到了错误:'TypeError:got is undefined',并从文件中回显:'[{“got”:“1235.00”,“needed”:“4350”}]' – Thaillie 2014-12-06 18:28:42