【问题标题】:PHP & AJAX - No Refresh on another Page when data is FetchPHP & AJAX - 获取数据时在另一个页面上不刷新
【发布时间】:2018-12-21 00:53:00
【问题描述】:

我当前的程序正在添加数据并将其插入数据库,但我想要的是,我希望在其他页面或浏览器上自动不刷新。所以我有这两个浏览器,我怎样才能在不刷新的情况下将数据提交到另一个页面。现在它正在发送,但问题是我需要刷新页面

这是我的 Ajax4.html

代码
 <form id="postForm">
        <input type="text" name="name" id="name2">
        <input type="submit" value="Submit">
    </form>

    <script>

        document.getElementById('postForm').addEventListener('submit', postName);


        function postName(e){
            e.preventDefault();

            var name = document.getElementById('name2').value;
            var params = "name="+name
;
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'process.php', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

            xhr.onload = function(){
                console.log(this.responseText);
            }
            xhr.send(params);
        }       
    </script>

我的 Process.php

这里是我连接数据库的地方

    <form id="postForm">
        <input type="text" name="name" id="name2">
        <input type="submit" value="Submit">
    </form>

    <script>

        document.getElementById('postForm').addEventListener('submit', postName);


        function postName(e){
            e.preventDefault();

            var name = document.getElementById('name2').value;
            var params = "name="+name
;
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'process.php', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

            xhr.onload = function(){
                console.log(this.responseText);
            }
            xhr.send(params);
        }       
    </script>

我的发送页面Ajax5.html

这里是我获取数据的地方,这里是我想在不刷新页面的情况下发送数据的地方

<button id="button">Get User</button>
        <br><br>

        <h1>Users</h1>
        <div id="users"></div>

<script>

document.getElementById('button').addEventListener('click', loadUsers);

    function loadUsers(){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'users.php', true);

        xhr.onload = function(){
            if(this.status == 200){
                var users = JSON.parse(this.responseText);

                var output = '';

                for(var i in users){
                output += '<ul>' +
                    '<li>ID: ' +users[i].id+'</li>' +
                    '<li>Name: ' +users[i].name +'</li>' +
                    '</ul>';
                }

                document.getElementById('users').innerHTML = output;
            }
        }

        xhr.send();
    }

</script>

【问题讨论】:

  • 要么轮询新数据,要么使用某种推送/网络套接字设置
  • 听起来您需要一个重复的 ajax 请求来经常检查更改并在发生更改时更新页面。
  • @Phil 先生,您是什么意思? ..
  • @Tristan 怎么样?复制我的 ajax 代码?
  • 这里显示的总体思路stackoverflow.com/a/13749256/5509627

标签: javascript php html mysql ajax


【解决方案1】:

您可以添加 setInterval 以定期更新用户列表:

var still_fetching = false;

//fetch data every 3 seconds (3000)
setInterval(function(){ 
     if (still_fetching) {
         return;
     }
     still_fetching = true;
     loadUsers();
}, 3000);

//need to update a bit this function
function loadUsers(){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'users.php', true);

        xhr.onload = function(){
            if(this.status == 200){
                var users = JSON.parse(this.responseText);

                var output = '';

                for(var i in users){
                output += '<ul>' +
                    '<li>ID: ' +users[i].id+'</li>' +
                    '<li>Name: ' +users[i].name +'</li>' +
                    '</ul>';
                }

                document.getElementById('users').innerHTML = output;
                still_fetching = false;
            }
        }

        xhr.send();
  }

【讨论】:

  • 请说明你是怎么做到的?
  • setInterval() 将始终执行取决于您指定的秒数,它可以是 500 秒,如果 ajax 仍在获取,则需要放置额外的标志,否则它将与下一个间隔发生冲突。您可以使用 clearInterval(handler_variable) 取消 setInterval。无论你放在 setInterval 函数中的什么,都会被执行。
  • 即使它是modal 而不是text 的形式也可以使用吗?
  • 任何你放在 setInterval 函数中的东西都会被执行。通常用于调用其他函数。
  • 如果我再问一次,您介意回答同样的问题吗?我无法让它成为一个模态,我希望它弹出
猜你喜欢
  • 2019-05-21
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多