猿问

为什么$_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);

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

天涯尽头无女友
浏览 507回答 3
3回答

qq_遁去的一_1

得到空数组应该是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);输出吧。
随时随地看视频慕课网APP
我要回答