Ajax提交到自己的PHP文件,但是似乎PHP函数无法执行

时间:2018-12-01 02:10:36

标签: php html ajax

Ajax提交到自己的PHP文件,但是似乎PHP函数无法执行。

<?php

function request(){
    echo "<h1>requested</h1>";
}

?>
<html id="html">
<button id="btn_click" onclick="request1()">click</button>


</html>
<script  type="text/javascript">
    function request1(){
        document.write("<h1>been clicked</h1>");
        var xmlhttp = new XMLHttpRequest();

        xmlhttp.open("GET", "/index.php", true);
        xmlhttp.send();
    }
</script>

JavaScript执行成功,但PHP代码似乎未执行。

2 个答案:

答案 0 :(得分:2)

不过,要补充gibberish所说的内容,还有更多内容。您还必须记住,您似乎根本没有执行该功能。

除非被调用,否则PHP函数不会执行任何操作。

function request() {
  echo "<h1>Hello</h1>"
}

除非您调用上面的函数,否则它将不受影响:

request() // <h1>Hello</h1>

当保持请求简单时,最好使用AJAX。您发送请求/path/to/file.php,然后该请求应返回纯文本响应或JSON对象,或者如果您在网站上使用模式或某些静态项目,则该请求应返回完全呈现的静态页面。

/path/to/file.php

<?php

if( $_GET['clicked'] ) {

  // do whatever 

  echo json_encode([
    'user_id' => 1,
    'total_clicks' => $_GET['clicked'],
    'random_number' => rand(100, 999)
  ]);

}

JS可以轻松处理响应:

function request(id) {
  return fetch(`/path/to/file.php?clicked=${id}`)
          .then(res => {
            console.log(res);
            body.innerHTML += res.user_id;
            body.innerHTML += res.total_clicks;
          })
          .catch(err => console.error(err));
}

这是使服务器从数据库返回信息并使页面内容根据需要进行交互的最简单方法。

答案 1 :(得分:0)

$_SERVER['HTTP_X_REQUESTED_WITH']帮助我们检测到AJAX请求

    <?php
//Check Here Ajax Request
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
    function request(){
       echo "<h1>requested</h1>";
    }
    request();
    die;
}
?>
<html id="html">
    <body>
        <button id="btn_click" onclick="request1()">click</button>
        <div class="response" id="result" ></div>

        <script  type="text/javascript">
            function request1(){
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == XMLHttpRequest.DONE) {   // XMLHttpRequest.DONE == 4
                       if (xmlhttp.status == 200) {
                           document.getElementById("result").innerHTML = xmlhttp.responseText;
                       }
                    }
                };
                xmlhttp.open("GET", "./index.php", true);
                xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // <-- ADD this
                xmlhttp.send();
            }
        </script>
    </body>
</html>