ajaxでのjsonの応答

記事の一般的なリストに戻る

ajaxでのjsonの応答

実際の作業では、サーバーにリクエストを送信し、サーバーから返されるjsonデータのほとんどはフォーマットされたデータです。
この記事では、jsonフォーマットされたデータの処理方法について説明します。

今回使用したキーは下矢印です。
キーボードを押して下矢印ボタンを押すと、サーバーはデータを返します。

1.testfive文件夹このフォルダ内に
作成します2.作成しますjson.html文件
3.作成しますserver.js文件

ケースナンバーワン


下矢印として使用するキーを作成します。
キーボードを押して下矢印ボタンを押すと、サーバーはデータを返します。
json.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="result" style="width: 300px;height: 200px;border: solid 2px teal;"></div>
    <script>
        // 一:获取元素对象
        const textone = document.getElementById('result');
        // 二:绑定键盘按下事件
        window.onkeydown = function(){
     
     
            // 测试打印
            console.log("已经按下按键");
            // 1.发送请求
            const textone = new XMLHttpRequest();
            // 2.初始化
            textone.open('GET','http://127.0.0.1:8000/jsonserver');
            // 3.发送
            textone.send();
            // 4.事件绑定
            textone.onreadystatechange = function(){
     
     
                if(textone.readyState === 4){
     
     
                    if(textone.status >= 200 && textone.status < 300){
     
     
                        // 测试打印
                        console.log(textone.response);
                        result.innerHTML = textone.response;
                    }
                }
            }
        }
    </script>
</body>
</html>

server.js文件

// 1. 引入express
const express = require('express');

// 2.创建对象
const app = express();

// 3.创建路由规则  里面的形参 request与response   (自己可以随便定义名字的)
//  建议写成  request与response  因为可以见名思意,方便自己看
// request  对请求报文的封装
// responst 对响应报文的封装
//  请求路径为'/server'

// 当使用post请求时候会因为发送的信息没有收到对应的结果所以回报错
// 所以该处使用all  表示可以接收任意类型的请求      如get post 等等
app.all('/jsonserver', (request, response)=>{
    
    
    // 设置响应头 设置允许跨域
    // 头名字为Access-Control-Allow-Origin
    // 头的值为
    response.setHeader('Access-Control-Allow-Origin','*');
    // 响应头        *号表示所有的头信息都可以接收
    response.setHeader('Access-Control-Allow-Headers','*');
    // 设置响应体
    response.send('ALL接收成功');

});

// 4. 监听端口启动服务
// 这里listen(8000)后面添加了一个回调,用来提示,告诉自己是否监听成功
app.listen(8000, ()=>{
    
    
    console.log("服务已经启动,8000端口监听中......");
});

下矢印ボタンを押してデータに戻ります
ここに画像の説明を挿入します

ケース2

データの一部に応じて、このオブジェクトをブラウザに返します

const data = {
    
    
    name: 'dalaojun'
};

直接にこのオブジェクトresponse.send()ための内部に置くには、十分ではありませんsend()だけでそこに置くことができ字符串、およびbutfer(这个忘记了淦)
ので、文字列オブジェクトを変換する必要がある
使用してJSON.stringify()変換する方法を

server.js文件

// 1. 引入express
const express = require('express');

// 2.创建对象
const app = express();

// 3.创建路由规则  里面的形参 request与response   (自己可以随便定义名字的)
//  建议写成  request与response  因为可以见名思意,方便自己看
// request  对请求报文的封装
// responst 对响应报文的封装
//  请求路径为'/server'

// 当使用post请求时候会因为发送的信息没有收到对应的结果所以回报错
// 所以该处使用all  表示可以接收任意类型的请求      如get post 等等
app.all('/jsonserver', (request, response)=>{
    
    
    // 设置响应头 设置允许跨域
    // 头名字为Access-Control-Allow-Origin
    // 头的值为
    response.setHeader('Access-Control-Allow-Origin','*');
    // 响应头        *号表示所有的头信息都可以接收
    response.setHeader('Access-Control-Allow-Headers','*');
    // 响应一个数据   把这个对象返回给浏览器
    const data = {
    
    
        name: 'dalaojun'
    };
    // 对对象进行字符串转换
    let str = JSON.stringify(data);
    // 设置响应体
    response.send(str);

});

// 4. 监听端口启动服务
// 这里listen(8000)后面添加了一个回调,用来提示,告诉自己是否监听成功
app.listen(8000, ()=>{
    
    
    console.log("服务已经启动,8000端口监听中......");
});

次に、ブラウザに表示されるのは、このオブジェクトが文字列形式に変換されたデータです。
ここに画像の説明を挿入します

ケース3

送信された文字列データをフロントエンドのオブジェクトに変換します

結果はJSON形式の文字列
です。単純なデータで結果を取得するのは比較的簡単ですが、複雑なデータの場合、その中のデータの一部を抽出するのは非常に面倒です。

1.データの変換を手動で実行します

// 手动对数据转化
let data = JSON.parse(textone.response);
// 在控制台中打印
console.log(data);
// 把name的值显示在方框内
result.innerHTML = data.name;

json.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="result" style="width: 300px;height: 200px;border: solid 2px teal;"></div>
    <script>
        // 一:获取元素对象
        const textone = document.getElementById('result');
        // 二:绑定键盘按下事件
        window.onkeydown = function(){
     
     
            // 测试打印
            console.log("已经按下按键");
            // 1.发送请求
            const textone = new XMLHttpRequest();
            // 2.初始化
            textone.open('GET','http://127.0.0.1:8000/jsonserver');
            // 3.发送
            textone.send();
            // 4.事件绑定
            textone.onreadystatechange = function(){
     
     
                if(textone.readyState === 4){
     
     
                    if(textone.status >= 200 && textone.status < 300){
     
     
                        // 测试打印
                        // console.log(textone.response);
                        // result.innerHTML = textone.response;
                        // 手动对数据转化
                        let data = JSON.parse(textone.response);
                        // 在控制台中打印
                        console.log(data);
                        // 把name的值显示在方框内
                        result.innerHTML = data.name;
                    }
                }
            }
        }
    </script>
</body>
</html>

結果は
ここに画像の説明を挿入します

2.自動変換を使用します

上記を変更

// 自动转化
// 借助textone对象里面的属性来转化
// 设置响应体数据的类型
textone.responseType = 'json';

以下を編集

//  使用自动转化
result.innerHTML = textone.response.name

json.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="result" style="width: 300px;height: 200px;border: solid 2px teal;"></div>
    <script>
        // 一:获取元素对象
        const textone = document.getElementById('result');
        // 二:绑定键盘按下事件
        window.onkeydown = function(){
     
     
            // 测试打印
            console.log("已经按下按键");
            // 1.发送请求
            const textone = new XMLHttpRequest();
            // 
            // 自动转化
            // 借助textone对象里面的属性来转化
            // 设置响应体数据的类型
            textone.responseType = 'json';
            // 2.初始化
            textone.open('GET','http://127.0.0.1:8000/jsonserver');
            // 3.发送
            textone.send();
            // 4.事件绑定
            textone.onreadystatechange = function(){
     
     
                if(textone.readyState === 4){
     
     
                    if(textone.status >= 200 && textone.status < 300){
     
     
                        // 测试打印
                        // console.log(textone.response);
                        // result.innerHTML = textone.response;
                        // 手动对数据转化
                        // let data = JSON.parse(textone.response);
                        // 在控制台中打印
                        // console.log(data);
                         // 把name的值显示在方框内
                        // result.innerHTML = data.name;
// 
                        // 测试打印
                        console.log(textone.response);
                        //  使用自动转化
                        result.innerHTML = textone.response.name;
                    }
                }
            }
        }
    </script>
</body>
</html>

おすすめ

転載: blog.csdn.net/weixin_47021806/article/details/112057925