重新加载函数而不重新加载页面

时间:2014-05-29 05:52:50

标签: php ajax oop

我想在没有重新加载页面的情况下调出一个函数。 我知道这可以通过AJAX实现,但我不知道如何调用函数。

我想放一个计时器,所以它会每3秒重新加载一次,所以用户不需要每次都重新加载页面,看看是否有新消息。

$object = new Messages();
$object->ShowMessage($nick);

ShowMessage();是我想每隔3秒呼出一次的功能。

完整代码:

public function ShowMessage() {

    $st = $this->db->prepare("SELECT * FROM bericht");
    $st->execute();
    if($st->rowCount() == 0){
        echo 'There is no message jet!';
    }  

        foreach ($st as $bericht){
        $uid = $bericht['uid'];

        $nick = $this->db->prepare("SELECT * FROM users WHERE id=?");
        $nick->bindParam(1, $uid);
        $nick->execute();

            foreach($nick as $name) {   

            $image = $name['foto'];

        if($image == 'nophoto.jpg'){
        echo '<img src="image/nophoto.jpg" width="60px" height="30px">';

        } else {
        echo '<img src="image/'; echo $image.'"'; echo ' width="60px" height="30px">';
        }
        echo json_encode($name['name']) .': ';
        echo json_encode($bericht['message']).' <br> ';

    }

    }
}

3 个答案:

答案 0 :(得分:3)

你可以用ajax做到这一点。为此,您需要在前端实现ajax客户端函数以及处理ajax请求的处理程序。在前端,您可以使用jquery进行ajax操作;

setInterval(function() {
    $.get( "handler.php", function( data ) {
      // You can use data. It is in json format. 
      // Ex: alert(data.message) . "message" is one of the 
      // fields of returned array in php handler file
    }); 
}, 3000);

<强> handler.php

<?php
    $object = new Messages();
    $result = $object->ShowMessage($nick); 
    // I assume this returns array. 
    // Ex: array("type" => "error", "message" => "Error occured on feed");
    echo json_encode($result);
?>

更新:如果您不想使用json数据

更新您的代码,如下所示。只使用echo,您不需要返回json数据。

public function ShowMessage() {

    $st = $this->db->prepare("SELECT * FROM bericht");
    $st->execute();
    if($st->rowCount() == 0){
        echo 'There is no message jet!';
    }  

        foreach ($st as $bericht){
        $uid = $bericht['uid'];

        $nick = $this->db->prepare("SELECT * FROM users WHERE id=?");
        $nick->bindParam(1, $uid);
        $nick->execute();

            foreach($nick as $name) {   

            $image = $name['foto'];

        if($image == 'nophoto.jpg'){
        echo '<img src="image/nophoto.jpg" width="60px" height="30px">';

        } else {
        echo '<img src="image/'; echo $image.'"'; echo ' width="60px" height="30px">';
        }
        echo $name['name'] .': ';
        echo $bericht['message'].' <br> ';

    }

    }
}

和js;

setInterval(function() {
    $.get( "handler.php", function( data ) {
      // alert(data);
    }); 
}, 3000);

答案 1 :(得分:0)

你需要将javascript集成到你的php代码中。 使用jquery,您可以查看$.post函数。您可以使用javascript函数window.setInterval(yourFunction(),3000)

升级事件

您还需要创建一个将回复Ajax请求的php页面,该页面将作为参数传递给$.post

答案 2 :(得分:0)

只需通过ajax调用该脚本:

.html:
setInterval(function(){
  $.ajax({
    url: "showMessageScript.php",
    type: "post",
    data: {nick: $("#nick").val(), token: <?php echo $_SESSION['token']; ?>},
    success: function(jsonData){
        $('#display').text(jsonData['message']);
    }
  });
},
3000);

showMessageScript.php:

function showMessage($nick) {
   $object = new Messages();
   $object->ShowMessage($nick);
   echo json_encode(array('message': 'Your message is here'));
}

// check if authorized to do some action
if (!empty($_SESSION['token']) && $_SESSION['token'] == $_POST['token'] && !empty($_POST['nick'])) {
    showMessage($nick);
} else {
    echo json_encode(array('message': 'not authorized'));
}