我想在没有重新加载页面的情况下调出一个函数。 我知道这可以通过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> ';
}
}
}
答案 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'));
}