为什么$_POST超全局变量的值会出现一堆HTML标签

通过Ajax以post请求向服务器提交数据,在PHP中输出$_POST超全局变量的值。输出结果如下图
图片描述

代码如下:

//demo3.html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

</head>

<body>

    <form action="Demo3.php" method="POST">
    
    用户名:<input type='text' name='username' id='un'><br/>
    
    密码:<input type='text' name='password' id='pw'><br/>
    
    <input type='submit' id='submit' value='提交'>
    
    </form>
    
    <p id='tips'></p>

</body>

</html>

<script>

    var submit_btn = document.getElementById('submit');
    
    var xhr = new XMLHttpRequest();
    
    submit_btn.onclick = function(e){
    
        e.preventDefault();
    
        xhr.onreadystatechange = function(){
    
        if(xhr.readyState==4 && xhr.status==200){
    
            alert(xhr.responseText);
    
        }
    
        }
    
        var username = document.getElementById('un').value; //获得文本输入框中的内容
    
        var data = 'username='+username;
    
        xhr.open('post','Demo3.php');
    
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
    
        xhr.send(data);
    
    }

</script>

 

//Demo3.php

<?php

    echo ($_POST);

有木有大神知道问题出在哪里。。。

阅读 2.5k
3 个回答

得到空数组应该是Header头的问题,Content-Type应该是application/x-www-form-urlencoded吧。少了个字母d

1、你的ajax测试确实传输了数据到你的后台Demo3.php,这是正确的
2、出现一堆HTML标签是因为那是PHP后台的报错,你应该仔细看报错的内容

Notice : Array to string conversion
//因为你使用了的是echo,输出变量应该是文本,但是你向后台传输的是一个数组,你不应该用echo打印输出,应该使用var_dump

3、ajax确实有返回的结果,那个“正确”的结果其实就在最后一行Array,返回的是一个数组对象

$_POST是数组,不能使用echo来输出,你使用print_r($_POST);输出吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题