创建一个循环来调用php函数,并在javascript的同一html页面上从该函数返回
我正在尝试创建一个简单的webapp类的东西,它会在点击按钮时向我的客户发送推送通知。这是我创建的一个示例页面 我有一个名为创建一个循环来调用php函数,并在javascript的同一html页面上从该函数返回,javascript,php,jquery,Javascript,Php,Jquery,我正在尝试创建一个简单的webapp类的东西,它会在点击按钮时向我的客户发送推送通知。这是我创建的一个示例页面 我有一个名为sendPush.php的文件 点击按钮后,我想发送一个推送通知,该通知将作为 Notifications sent: "Notification sent to userId : xxxX" "Notification sent to userId : xxxX" "Notification sent to userId : xxxX" "Notification se
sendPush.php的文件
点击按钮后,我想发送一个推送通知,该通知将作为
Notifications sent:
"Notification sent to userId : xxxX"
"Notification sent to userId : xxxX"
"Notification sent to userId : xxxX"
"Notification sent to userId : xxxX"
我想向所有147个用户发送通知。下面是我的按钮点击php代码
<script type="text/javascript">
function sendNotif()
{
alert('ok');
}
</script>
<div class="content">
<input type="button" value="Click to Send" onClick="sendNotif();">
<br />
<br />
<label for="push">Notifications sent: </label>
</div>
如果$clients
是我的客户机列表,那么如何在与sendNotification($client)
修改
<script type="text/javascript">
var lastIdCount = 0;
function sendNotif()
{
var clients = "<?php echo $clients; ?>";
var getPath = "push.php?clientId=".concat(clients['lastIdCount']);
$.ajax({
type: "POST",
url: getPath,
task: "save",
data: {
ajax: "true",
},
dataType : 'json'
}).done(function( msg )
{
alert('ok');
if( msg.status=="1")
{
alert('okasdf');
lastIdCount++;
sendNotif();
}
else
{
alert("Error : "+msg.error);
}
});
}
</script>
javascript和php在两个不同的地方运行。javascript在浏览器中运行,而php在服务器上运行。你真的不能把这两者混在一起
您可能希望这样做的方式是,单击按钮,用javascript捕获单击,并向服务器上的php脚本发送ajax请求。而不是让php执行推送通知。php脚本完成后,将结果返回javascript以向用户显示
您还应该使用像jquery这样的javascript库,这使事情变得更容易(尤其是ajax调用)。您可以首先尝试获取所有要发送通知的客户端,并将它们的ID用于setInterval或setTimeout函数,这些函数将重复您的查询。也许你应该
get_clients.php
<?php
$clients_array = array(1,2,6,15,29); /// let's say ID's you got from SQL or w/e you need.
echo json_encode($clients_array); // [1,2,6,15,29]
?>
发送_for_client.php
<?php
$id = isset($_POST['id'])?$_POST['id']:false;
if($id){
// do some code you need
echo "Notification sent for id: ".$id;
}
?>
index.html
...
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(window).load(function(){
$("#send").click(function(){
$.post('get_clients.php',{},function(cid){
obj = JSON.parse(cid);
var cids = obj;
/// cids is array of clients. so, you can do like:
var i = 0;
var interval = setInterval(function(){
if(cids.length > i){
$.post('send_for_client.php',{id:cids[i]},function(resp){
$("#result").append(resp+"<br />");
i++;
});
} else {
clearInterval(interval);
}
},100);
});
});
});
</script>
</head>
<body>
<input id="send" type="submit" name="button" value="Send notifications" />
<div id="result">
</div>
</body>
...
。。。
$(窗口)。加载(函数(){
$(“#发送”)。单击(函数(){
$.post('get_clients.php',{},函数(cid){
obj=JSON.parse(cid);
var-cids=obj;
///cids是客户端数组。因此,您可以执行以下操作:
var i=0;
var interval=setInterval(函数(){
如果(cids.length>i){
$.post('send_for_client.php',{id:cids[i]},函数(resp){
$(“#结果”)。追加(resp+”
);
i++;
});
}否则{
间隔时间;
}
},100);
});
});
});
...
我并没有测试过这个想法,但它应该是有效的,或者只是展示了你们如何尝试找到解决问题的方法。请记住,此代码可能会有错误,因此。。不要偷懒地查看它们,甚至不要复制/粘贴:)
我希望它能帮上一点忙。我完全同意你的看法。是的,这就是我要问的问题,问题是,我想显示每次推送的结果。我不知道如何在循环中执行这个查询。哪条路应该是有效的。或者如果有一种方法我可以直接链接我的按钮点击触发php函数,那么你的php函数必须在服务器上运行。也就是说,触发该函数的唯一方法是向服务器发出运行该函数的请求。在您的情况下,发出该请求的最佳方式是对服务器进行ajax调用以运行该函数。一旦向服务器发出ajax请求,为了简单起见,php函数将运行循环并将结果存储在数组中。发送完所有通知后,服务器上的php脚本将把响应发送回javascript。现在,您的java脚本可以向用户显示结果了。@MikeWu您能看一下我修改的代码吗?我想您需要while或for循环,以防您只更改lastIdCount,而不会出现重复的情况。。etc:while(lastIdCount<?php
$id = isset($_POST['id'])?$_POST['id']:false;
if($id){
// do some code you need
echo "Notification sent for id: ".$id;
}
?>
...
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(window).load(function(){
$("#send").click(function(){
$.post('get_clients.php',{},function(cid){
obj = JSON.parse(cid);
var cids = obj;
/// cids is array of clients. so, you can do like:
var i = 0;
var interval = setInterval(function(){
if(cids.length > i){
$.post('send_for_client.php',{id:cids[i]},function(resp){
$("#result").append(resp+"<br />");
i++;
});
} else {
clearInterval(interval);
}
},100);
});
});
});
</script>
</head>
<body>
<input id="send" type="submit" name="button" value="Send notifications" />
<div id="result">
</div>
</body>
...