点击切换帐号登陆
帐号密码登陆

以JSON格式将请求数据发到服务器

# 8-3: 以JSON格式将请求数据发到服务器

**知识点**
- `JSON.stringify()`
- 扩展知识: PHP中的 `json_decode()`函数

-----------------------------------------------------

## `JSON.stringify()`

- 将`JavaScript对象`转为`JSON`格式的字符串
- `JSON.stringify({name: 'peter', age: 30})`转换结果为:
    + `"{"name":"peter","age":30}"`
    
------------------------------------------------------

## PHP中的 `json_decode()`函数
- 将`JSON格式字符串`解析为`PHP对象`或`PHP数组`

------------------------------------------------------

### 示例: code/demo08-3.html

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>以JSON格式将请求数据发到服务器</title>
</head>
<body>
<p>
    <label for="name">用户名:</label>
    <input type="text" name="name" id="name" placeholder="用户名">
    <span id="tips"></span>

</p>

<script>

    /**
     * 改一个请求发送函数的名称: postJSON()
     * 删除参数解析函数
     * 后端php脚本要重新写,解析json
     *
     */

    let p = document.getElementsByTagName('p').item(0);
    let input = document.getElementById('name');
    let tips = document.getElementById('tips');

    // 处理请求的脚本
    let url = 'temp/demo08-json.php';

    // 失去焦点时验证
    input.onblur = function () {
        let data = {name: input.value};
        postJSON(url, data, callback);
    };

    // 重获焦点清空提示信息
    input.onfocus = function () {
        tips.innerHTML = '';
    };


    // 发起POST请求
    function postJSON(url, data, callback) {
        // 创建XHR请求对象
        let request = new XMLHttpRequest();
        // 设置XHR请求状态变化监听事件
        request.onreadystatechange = function () {
            if (request.readyState === 4 && callback) callback(request);
        };

        // 设置请求参数,post请求,不用设置在url后拼接键值对
        request.open('POST',url);

        // 处理post请求,必须设置请求头信息,模拟表单提交
        request.setRequestHeader('content-type','application/x-www-form-urlencoded');

        // 发送请求, 直接转为json格式字符串
        request.send('user=' + JSON.stringify(data));
    }

    // 请求成功后的回调处理: DOM操作
    function callback(requst) {
        tips.innerHTML = requst.responseText;
        p.appendChild(tips);
    }


</script>
</body>
</html>
```

### 处理脚本: temp/demo08-03.php

```php
<?php
//var_dump($_POST);
$user = json_decode($_POST['user']);
$name = $user->name;


$userList = ['admin','peter','zhu'];

if (in_array($name, $userList)) {
   echo '<span style="color:red">用户名已存在,换一个呗~~</span>';
} else {
   echo '<span style="color:green">用户名可用</span>';
}
exit();
```


任务

?不会了怎么办
无数据提示暂无评论哟...我要评论
网站导航
标签地图
学习路径
视频教程
开发软件
旗下子站
php中文网
phpstudy
技术文章
文档工具
关于我们
企业合作
人才招聘
联系我们
讲师招募
QQ交流群
QQ官方交流群
微信公众号
微信公众号