原生Ajax 用post请求数据 报错 415

如图 根据一下接口文档,使用【原生】 ajax 调用接口,并且调用成功

答题:

let btn=document.querySelector('button')
        let p=document.querySelector('p')
        btn.addEventListener('click',function(){
            // --------------------------post请求
            // post请求的实例化,监听状态和get请求一样,区别在于建立连接后,要设置请求头
            // 再发送请求,并将要请求的数据写再send(里面)
            // ------1,实例化对象
            let xhr = new XMLHttpRequest()

            // ------2,建立链接
            // 不同于get请求,post请求建立链接时,请求的数据不写在请求地址里,写在send里
            xhr.open('post','http://139.9.177.51:3333/api/testPost')

            // ------3,设置请求头
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

            // -------4发送请求
            xhr.send('name=张三')


            // --------5,监听状态
            xhr.onreadystatechange=function(){
                // 当xhr.readyState 和 xhr.status 都成功时,才能请求到数据
                if(xhr.readyState===4 && xhr.status === 200){
                    // 接收到的是字符串,要用JSON接口转化为变量
                    let data=JSON.parse(xhr.responseText)
                    console.log(data);
                    p.innerHTML=data['data']
                }
            }
        })
</script>

此时会报错,显示415 仔细排解bug

下面接口文档显示参数类型是 application/jason

 但是我们现在所设置的请求头是这样:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

很明显就是这个问题,因为接口文档显示的是json 所以我们要把后面的改成json

// 3.1加请求头
        xhr.setRequestHeader('Content-Type', 'application/json')

 但是这时候还是请求不到数据.这是因为 json对象最明显的一个 特征就是 

是一个必须由双引号包裹,属性名属性值都必须有双引号包裹,所以在这个时候我们需要在全局定义一个空对象,把我们需要传的参数,放进去

let obj={
            "account":"22222222222220",
            "password" : "123456"
        }

因为我们在前面的obj当中就已经给了属性名属性值,所以在后面请求数据的时候就要把obj转换

        // 3.2发送请求 
        xhr.send(JSON.stringify(obj))

接下来就是一对转换...

 // 4.监听请求状态
        xhr.onreadystatechange=function(){
            if(xhr.readyState===4 && xhr.status===200){
            let data =JSON.parse(xhr.responseText) 
            JSON.stringify("参数",data)
            console.log(data);
            text.innerHTML=data['msg']
            }
        }

这样就会解决了 

完整代码如下

<body>
    <button id="btn">接受数据</button>
    <p id="text">

    </p>
    <script>
        let obj={
            "account":"22222222222220",
            "password" : "123456"
        }
        // 获取dom
        let btn = document.querySelector('#btn')
        // 文本
        let text = document.querySelector('#text')
        btn.addEventListener('click',function(){
        // 接口: http://139.9.177.51:8099/users/add
        // 1.创建实例对象
        let xhr = new XMLHttpRequest()
        // 2.建立链接
        xhr.open("post","http://139.9.177.51:8099/users/add")
        // 3.1加请求头
        xhr.setRequestHeader('Content-Type', 'application/json')
        // 3.2发送请求 必须是字符串
        xhr.send(JSON.stringify(obj))
        // 4.监听请求状态
        xhr.onreadystatechange=function(){
            if(xhr.readyState===4 && xhr.status===200){
            let data =JSON.parse(xhr.responseText) 
            JSON.stringify("参数",data)
            console.log(data);
            text.innerHTML=data['msg']
            }
        }
    })
    </script>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值