Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个循环来调用php函数,并在javascript的同一html页面上从该函数返回_Javascript_Php_Jquery - Fatal编程技术网

创建一个循环来调用php函数,并在javascript的同一html页面上从该函数返回

创建一个循环来调用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

我正在尝试创建一个简单的webapp类的东西,它会在点击按钮时向我的客户发送推送通知。这是我创建的一个示例页面

我有一个名为
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>
...