Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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
Javascript php表单&;在同一页面上显示多个结果并自动刷新_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

Javascript php表单&;在同一页面上显示多个结果并自动刷新

Javascript php表单&;在同一页面上显示多个结果并自动刷新,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我正在为一个电台创建一个呼叫屏幕。我希望表单在左边的div中,结果在右边的div中。共有6条电话线,因此所有6条电话线应能同时显示。我想在他们的信息上说明每个来电者在电话线上等待的时间。我已经创建了2个php文件。一个标记为cm.php,其中包含表单;另一个标记为cm2.php,将表单结果放在页面右侧的div中。我不熟悉php和ajax,所以我不知道如何使用delete按钮在右边的div中获得结果,所以当调用方挂断电话时,他们的信息就会消失。我在这里搜索了好几个星期&在网上搜索了好几个星期&当使

我正在为一个电台创建一个呼叫屏幕。我希望表单在左边的div中,结果在右边的div中。共有6条电话线,因此所有6条电话线应能同时显示。我想在他们的信息上说明每个来电者在电话线上等待的时间。我已经创建了2个php文件。一个标记为cm.php,其中包含表单;另一个标记为cm2.php,将表单结果放在页面右侧的div中。我不熟悉php和ajax,所以我不知道如何使用delete按钮在右边的div中获得结果,所以当调用方挂断电话时,他们的信息就会消失。我在这里搜索了好几个星期&在网上搜索了好几个星期&当使用2个php文件时,无法在页面右侧显示提交的表单结果。ajaxSetup确实将cm2.php放在右侧的一个div上,但没有包含表单结果,因此cm2.php需要正确的代码。它还刷新了整个html,假设在提交表单时只刷新右侧div:#submitted info。我需要什么代码?我的代码如下:

cm.php:

<!DOCTYPE html>
<html>
<head>
<Meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-
1252">
<title>Call Mananger</title>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-
validate/1.16.0/jquery.validate.min.js"></script>
<script type="text/javascript">
$.ajaxSetup(
cache: false
});
var auto_refresh = setInterval(
function ()
{
$('#submittedInfo').load('cm2.php').fadeIn("slow");
}, 1000); // refresh every 10000 milliseconds
</script>
<style> <?php include 'call manager.css'; ?> </style>
</head>
<body>
<div id="callerInfo">
<form name="info" action="cm.php" enctype="multipart/form-data"
method="post">
<table>
<tbody>
<tr>
<td>Line</td>
<td>
<select name="select" id="line">
<option value="Line 1: ">1</option>
<option value="Line 2: ">2</option>
<option value="Line 3: ">3</option>
<option value="Line 4: ">4</option>
<option value="Line 5: ">5</option>
<option value="Line 6: ">6</option>
</select>
</td>
</tr>
<tr>
<td>Name</td>
<td> 
<input type="text" name="name" value>
</td>
</tr>
<tr>
<td>Town</td>
<td>
<input type="text" name="town" value>
</td>
</tr>
<tr>
<td>Topic</td>
<td>
<input type="text" name="topic" value>
</td>
</tr>
<tr>
<td>
<input type='submit' value='Submit Caller' name="submit">
</td>
</tr>
</tbody>
</table>
</form> 
</div>
<div id="submittedInfo">
No Callers
</div>
</body>
</html>`

打电话给马南格
$.ajaxSetup(
缓存:false
});
var auto_refresh=setInterval(
函数()
{
$('#submittedInfo').load('cm2.php').fadeIn(“slow”);
}, 1000); // 每10000毫秒刷新一次
线
1.
2.
3.
4.
5.
6.
名称
城镇
话题
没有来电者
`
cm2.php

<?php

echo "Waiting: ". date('i:s'). '</b><br>';
echo 'Line: '.$.post['select'];
echo '- '. $.post['name']. '</b><br>';
echo 'Town: '. $_POST['town']. '</b><br>';
echo 'Topic: '. $_POST['topic'].'</b><br>';
?>

<form enctype="multipart/form-data" method="post" action="cm.php">
<input type="hidden" name="listenerInfo" value="">
<input type="submit" name="deleteCaller" value="Delete Caller"> 
</form>

我有一点空闲时间,所以制作一个演示,演示如何使用会话在一个页面上完成这一切。没有jQuery(我不使用它),因此您可能需要适当地调整ajax调用——毫无疑问,jQuery中提供了各种方法,可以简化以下代码

<?php
    session_start();

    $maxlines=6;    #how many phone lines - default 6
    $svar='calls';  #session variable name

    /* create a new session variable if it does not already exist */
    if( !isset( $_SESSION[ $svar ] ) )$_SESSION[ $svar ]=array();

    /* Process ajax POST requests */
    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST ) ){
        ob_clean();

        $cmd=filter_input( INPUT_POST, 'cmd', FILTER_SANITIZE_STRING );
        $line=filter_input( INPUT_POST, 'line', FILTER_SANITIZE_NUMBER_INT );


        if( $cmd ){
            switch( $cmd ){
                case 'poll':
                    $json=json_encode( $_SESSION[ $svar ] );
                break;
                case 'add-caller':
                    $_POST['time']=date('H:i:s');
                    $_SESSION[ $svar ][ $line ]=$_POST ;
                    $json=json_encode( $_SESSION[ $svar ] );
                break;
                case 'delete':
                    if( $line && array_key_exists( $line,$_SESSION[ $svar ] ) ) unset( $_SESSION[ $svar ][ $line ] );
                    $json=json_encode( $_SESSION[ $svar ] );
                break;
            }
        }
        header('Content-Type: application/json');
        exit( $json );
    }
?>
<!doctype html>
<html>
    <head>
        <meta charset='utf-8' />
        <title>Call Manager</title>
        <style>
            html, html *{font-family:calibri,verdana,arial;font-size:1rem;box-sizing:border-box;}
            #container{width:95%;float:none;margin:0 auto;box-sizing:border-box;}
            #lhs{width:calc(20% - 2rem );float:left;height:80vh;}
            #rhs{width:calc(80% - 2rem );float:right;height:80vh;}
            #lhs,#rhs{display:block;clear:none;box-sizing:border-box;margin:0 1rem}
            input[type='button']{float:none;display:inline-block;margin:1rem auto;}
            input[type='text'],select{width:100%;padding:0.5rem;}
            table{width:100%;}
            td{text-align:center;}
            tr td:not([colspan]):first-of-type{text-align:left;}
            h1{font-size:2rem;text-align:center;}
            h2{font-size:1.25rem;text-align:center;}
            pre{clear:both;}
            ul,li{ display:block; width:100%;float:left;}
            li:nth-of-type(even){background:whitesmoke;}
            option[disabled]{background:rgba(255,0,0,0.25)}
            li{padding:0.25rem 1rem;}
            li div span{font-weight:bold;margin:0 0 0 2rem;}
            li div input{ color:red;float:right!important;clear:none; }
        </style>
        <script>

            var _int;
            var _poll=2.5;

            function ajax(m,u,p,c,o){
                /*
                    Utility function for basic Ajax requests
                    m = method ~ GET or POST only
                    u = url ~ the script or resource to which the request will be sent
                    p = parameters ~ an object literal of parameters to send
                    c = callback ~ asynchronous callback function that processes the response
                    o = options ~ object literal o foptions which are also passed to callback

                */
                var xhr=new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if( xhr.readyState==4 && xhr.status==200 )c.call( this, xhr.response, o, xhr.getAllResponseHeaders() );
                };
                if( o.hasOwnProperty('formdata') && o.formdata===true && m.toLowerCase()=='post' ){
                    /* send formdata object "as-is" ~ set p = FormData */
                } else {
                    var params=[];
                    for( var n in p )params.push( n+'='+p[ n ] );
                    switch( m.toLowerCase() ){
                        case 'post': p=params.join('&'); break;
                        case 'get': u+='?'+params.join('&'); p=null; break;
                    }
                }
                xhr.open( m.toUpperCase(), u, true );
                if( !o.hasOwnProperty('formdata') ) xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                if( o && Object.keys( o ).length > 0 && o.hasOwnProperty('headers') ){
                    for( var h in o.headers )xhr.setRequestHeader( h, o.headers[ h ] );
                }
                xhr.send( p );
            }

            function createNode( t, a, p ) {
                try{
                    /*
                        utility function to simplify creation of new DOM nodes
                        t = type ~ node type or tag name of node
                        a = attributes ~ object literal of attributes to add to node
                        p = parent ~ the DOM node to which the new node will be added
                    */
                    var el = ( typeof( t )=='undefined' || t==null ) ? document.createElement( 'div' ) : document.createElement( t );
                    for( var x in a ) if( a.hasOwnProperty( x ) && x!=='innerHTML' ) el.setAttribute( x, a[ x ] );
                    if( a.hasOwnProperty('innerHTML') ) el.innerHTML=a.innerHTML;
                    if( p!=null ) typeof( p )=='object' ? p.appendChild( el ) : document.getElementById( p ).appendChild( el );
                    return el;
                }catch(err){
                    console.warn('createNode: %s, %o, %o',t,a,p);
                }
            }





            function bindEvents( event ){
                /* get references to dom nodes */
                var form=document.getElementById('caller-info');
                var select=form.querySelector('select');
                var rhs=document.getElementById('rhs').querySelector('ul');

                /* utility functions */
                var _clearform=function(){
                    Array.prototype.slice.call( form.querySelectorAll('input[type="text"]') ).forEach(function(n){n.value=''});
                };
                var _disable=function(i){
                    select.querySelector('option[data-id="'+i+'"]').disabled=true;
                };
                var _enable=function(i){
                    select.querySelector('option[data-id="'+i+'"]').removeAttribute('disabled');
                };
                var _deletecaller=function(e){
                    _enable.call( this, this.dataset.id );
                    _setcaller.call( this, this.dataset.id, 'Line '+this.dataset.id )
                    this.parentNode.parentNode.parentNode.removeChild( this.parentNode.parentNode );
                };
                var _setcaller=function(i,name){
                    select.querySelector('option[data-id="'+i+'"]').innerHTML=name;
                }


                /* ajax config */
                var method='post';
                var url=location.href;
                var options={ formdata:true, node:rhs, clear:true };
                var callback=function(r,o,h){
                    /* clear text fields in the form */
                    if( o.clear===true ) _clearform.call( this );

                    var data=JSON.parse( r );
                    for( var n in data ){

                        var json=data[n];
                        var id='caller_'+json.line;
                        /*
                            change attributes of select menu
                            and change the displayed text of 
                            selected option to indicate the line
                            is busy
                        */
                        _enable.call( this, json.line );
                        _disable.call( this, json.line );
                        _setcaller.call( this, json.line, 'Line '+json.line+' - '+json.name );


                        /*
                            if there is NOT a node with id ( as above )
                            then create a new `li` node with child content
                            including the `delete` button to which a new
                            `onclick` event listener is added.
                        */
                        if( !document.getElementById( id ) ){
                            var li=createNode( 'li', { id:id }, o.node );
                            var div=createNode( null,{ 'data-id':json.line, innerHTML:'<span>Line:</span> '+json.line+' <span>Name:</span> '+json.name+' <span>Town:</span> '+json.town+' <span>Topic:</span> '+json.topic+' <span>Waiting since: </span>' + json.time },li);
                            var bttn=createNode( 'input', { type:'button',value:'Delete','data-id':json.line }, div );
                                bttn.onclick=function( event ){
                                    ajax.call( this, method, url, { cmd:'delete', line:this.dataset.id }, _deletecaller.bind( this ), { node:rhs } );
                                }.bind( bttn );
                        }
                    }
                    /*
                        If there are no child nodes (`li`) to the
                        `ul` - stop polling
                    */
                    if( o.node.childNodes.length==0 ){
                        clearInterval( _int );
                        _int=Number.NaN;
                        console.info('stop polling...');
                    }
                };


                var _beginpolling=function(){
                    if( isNaN( _int ) ){
                        console.info('start polling...');
                        _int=setInterval(function(){
                            ajax.call( this, method, url, { cmd:'poll' }, callback, { node:rhs, clear:false } );
                        }, 1000 * _poll );
                    }
                };



                /* Add caller - event listener assigned to `Submit Caller` button */
                var evtSubmitCaller=function( event ){
                    /*
                        rather than manually collecting form field parameters
                        and processing into a payload to send in the request, 
                        use the `FormData` object ~ adding ( append ) a custom
                        parameter `cmd`
                    */
                    var fd=new FormData( form );
                        fd.append('cmd','add-caller');
                    ajax.call( this, method, url, fd, callback, options );
                    _beginpolling.call( this );
                };
                form.querySelector('input[type="button"]').onclick=evtSubmitCaller;




                /* Poll every n seconds */
                _beginpolling.call( this );

            }
            document.addEventListener( 'DOMContentLoaded', bindEvents, false );
        </script>
    </head>
    <body>
        <h1>Call Manager</h1>
        <div id='container'>
            <div id='lhs' data-id='callerInfo'>
                <form id='caller-info' method='post'>
                    <h2>Add Caller</h2>
                    <table>
                        <tbody>
                            <tr>
                                <td>Line</td>
                                <td>
                                    <select name='line'>
                                    <?php
                                        for( $i=1; $i <= $maxlines; $i++ ){
                                            $caller = !empty( $_SESSION[ $svar ] ) && array_key_exists( $i, $_SESSION[ $svar ] ) ? 'Line '.$i.' - '.$_SESSION[ $svar ][ $i ]['name'] : "Line $i";
                                            $disabled = !empty( $_SESSION[ $svar ] ) && array_key_exists( $i, $_SESSION[ $svar ] ) ? 'disabled=true' : '';
                                            echo "<option data-id='$i' value='$i' $disabled>$caller";
                                        }
                                    ?>
                                    </select>
                                </td>
                            </tr>
                            <tr>
                                <td>Name</td>
                                <td> 
                                    <input type='text' name='name' />
                                </td>
                            </tr>
                            <tr>
                                <td>Town</td>
                                <td>
                                    <input type='text' name='town' />
                                </td>
                            </tr>
                            <tr>
                                <td>Topic</td>
                                <td>
                                    <input type='text' name='topic' />
                                </td>
                            </tr>
                            <tr>
                                <td colspan=2>
                                    <input type='button' value='Submit Caller' />
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </form>
            </div>
            <div id='rhs' data-id='submittedInfo'>
                <ul></ul><!-- will be populated by ajax callback -->
            </div>
        </div>
    </body>
</html>

电话经理
html,html*{字体系列:calibri,verdana,arial;字体大小:1rem;框大小:边框框;}
#容器{宽度:95%;浮动:无;边距:0自动;框大小:边框框;}
#lhs{宽度:计算(20%-2rem);浮动:左侧;高度:80vh;}
#rhs{宽度:计算(80%-2rem);浮动:右侧;高度:80vh;}
#lhs,#rhs{显示:块;清除:无;框大小:边框框;边距:0 1rem}
输入[type='button']{float:none;显示:内联块;边距:1rem auto;}
输入[type='text'],选择{width:100%;padding:0.5rem;}
表{宽度:100%;}
td{text align:center;}
tr td:not([colspan]):类型{text align:left;}的第一个
h1{字体大小:2rem;文本对齐:居中;}
h2{字体大小:1.25rem;文本对齐:居中;}
pre{clear:两者;}
ul,li{显示:块;宽度:100%;浮点:左;}
li:n类型(偶数){背景:白烟;}
选项[已禁用]{背景:rgba(255,0,0,0.25)}
li{padding:0.25rem 1rem;}
li div span{font-weight:bold;margin:02rem;}
li div输入{color:red;float:right!重要;clear:none;}
var_int;
var_poll=2.5;
函数ajax(m、u、p、c、o){
/*
用于基本Ajax请求的实用程序函数
m=方法~仅获取或发布
u=url~请求将发送到的脚本或资源
p=parameters~要发送的参数的对象文本
c=callback~处理响应的异步回调函数
o=options~对象文字o也传递给回调函数的选项
*/
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(){
if(xhr.readyState==4&&xhr.status==200)c.call(this,xhr.response,o,xhr.getAllResponseHeaders());
};
if(o.hasOwnProperty('formdata')&&o.formdata==true&&m.toLowerCase()==post'){
/*按原样发送formdata对象~set p=formdata*/
}否则{
var参数=[];
对于(p中的变量n)参数push(n+'='+p[n]);
开关(m.toLowerCase()){
大小写“post”:p=params.join(“&”);break;
大小写'get':u+='?'+参数join('&');p=null;break;
}
}
xhr.open(m.toUpperCase(),u,true);
如果(!o.hasOwnProperty('formdata'))xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
if(o&&Object.keys(o).length>0&&o.hasOwnProperty('headers')){
对于(o.headers中的var h)xhr.setRequestHeader(h,o.headers[h]);
}
xhr.send(p);
}
函数createNode(t,a,p){
试一试{
/*
用于简化新DOM节点创建的实用程序函数
t=类型~节点类型或节点的标记名
a=属性~要添加到节点的属性的对象文字
p=parent~新节点将添加到的DOM节点
*/
var el=(typeof(t)='undefined'| | t==null)?document.createElement('div'):document.createElement(t);
对于(a中的变量x)if(a.hasOwnProperty(x)&&x!='innerHTML')el.setAttribute(x,a[x]);
如果(a.hasOwnProperty('innerHTML'))el.innerHTML=a.innerHTML;
如果(p!=null)typeof(p)='object'?p.appendChild(el):document.getElementById(p).appendChild(el);
返回el;
}捕捉(错误){
console.warn('createNode:%s,%o,%o',t,a,p);
}
}
函数bindEvents(事件){
/*获取对dom节点的引用*/
var form=document.getElementById('caller-info');
变量选择=fo