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

时间:2014-08-02 07:07:57

标签: javascript php jquery

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

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

我面临的问题是,我在同一个应用程序中使用php函数命名为sendNotification(),它将发送通知并回显结果。但我不知道如何在javascript函数中的javascript中创建这个php函数的循环

function sendNotif() 
        {
            // LOOP HERE
        } 

如果$clients是我的客户列表,我如何在sendNotification($client)

的同一页面中使用php函数在循环中向所有人发送通知

修饰

<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>

在push.php中

样本

$resp = array();
    $resp['error'] = 'Invalid Request';
    $resp['status'] = '0';
    $resp['data'] = '0';

2 个答案:

答案 0 :(得分:1)

javascript和php在2个不同的地方运行。当你的php在服务器上运行时,你的javascript在浏览器中运行。你真的不能混合这两个。

您可能想要这样做的方法是,在按钮上单击使用javascript捕获单击并将ajax请求发送到位于服务器上的php脚本。比有php执行推送通知。完成php脚本后,将结果返回给javascript以显示给用户。

您还应该使用像jquery这样的javascript库,这会让事情变得更容易(尤其是ajax调用)。

答案 1 :(得分:1)

您可以先尝试获取要发送通知的所有客户端,并将它们用于setInterval或setTimeout函数,这些ID会重复您的查询。可能你应该

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]
?>

send_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>
...

我没有对此进行测试,但是它应该可以正常工作或只是表明您如何尝试为您的问题找到解决方案。请记住,这段代码可能会有错误,所以......不要懒得查看它们,甚至不要复制/粘贴:)

我希望它有所帮助。