八、服务端响应Json以及前端获取Json

个人学习记录,欢迎指点讨论

1、创建服务端代码server.js

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

//2、创建引用对象
const app = express();

//3、创建路由规则
app.all('/json-server',(request,response) =>
{
    //设置响应头    允许跨域
    response.setHeader('Access-Control-Allow-Origin','*');
    //设置响应数据
    const data = {
        name: 'json'
    };
    //需要对data进行字符串转换
    let str = JSON.stringify(data);
    //设置响应体
    response.send(str);
});

//4、监听端口启动服务
app.listen(8000,()=>{

    console.log("服务器已经启动,8000端口监听中...");
});

Tips:let 声明的变量只会在声明 let 变量所处的代码块中有效

2、创建前端页面3-json.html

2.1手动对数据进行转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json响应</title>
    <style>
        #result{
            width:200px;
            height:100px;
            border:solid 1px #90B;
        }
    </style>
</head>
<body>
    <div id = 'result'></div>
    <script>
        const result = document.getElementById('result');
        //绑定键盘按下事件
        window.onkeydown = function(){
            //创建请求
            const xhr = new XMLHttpRequest();
            //初始化  设置请求方法,url
            xhr.open('Get','http://127.0.0.1:8000/json-server');
            //发送请求
            xhr.send();
            //事件绑定
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        //1、手动对数据进行转换
                        let data = JSON.parse(xhr.response);
                        console.log(data)
                        result.innerHTML = data.name;
                    } 
                }
            }
        }
    </script>
</body>
</html>

将两个文件放入一个文件夹内,并右击文件夹选择在集成终端中打开,终端命令行输入

node server.js

打开html文件,F5运行,ctrl shift I 打开开发者工具,在浏览器按下键盘任意键,显示效果为:

 2.2设置响应体类型


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json响应</title>
    <style>
        #result{
            width:200px;
            height:100px;
            border:solid 1px #90B;
        }
    </style>
</head>
<body>
    <div id = 'result'></div>
    <script>
        const result = document.getElementById('result');
        //绑定键盘按下事件
        window.onkeydown = function(){
            //创建请求
            const xhr = new XMLHttpRequest();
            //设置响应体类型
            xhr.responseType = 'json';
            //初始化  设置请求方法,url
            xhr.open('Get','http://127.0.0.1:8000/json-server');
            //发送请求
            xhr.send();
            //事件绑定
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        console.log(xhr.response);
                        result.innerHTML = xhr.response.name;
                    } 
                }
            }
        }
    </script>
</body>
</html>

测试方法同上

3、服务端自动重启工具npm的安装

集成终端 ctrl c 关闭正在运行的js程序,确保没有正在运行的程序后,输入

npm install -g nodemon

等待下载安装完毕

 安装完毕后,接下来再运行服务端js程序,需要输入

nodemon 服务端文件名.js

 以后再修改服务端的代码就可以不需要重启服务了,nodemon会帮助我们自动重启

 保存代码之后,终端面板中会自动重新启动服务器,在浏览器中点击刷新页面就可以看到我们新编辑的内容

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
前端跨域获取json文件内容,可以通过以下两种方式实现: 1. JSONP跨域 JSONP(JSON with Padding)是一种跨域解决方案,通过动态添加`<script>`标签来获取跨域数据。具体实现步骤如下: - 在服务端定义一个回调函数,将需要返回的数据作为函数的参数传递给该函数,并将函数名作为参数传递给前端。 - 在前端定义一个函数,该函数名与服务端定义的函数名一致,用于接收服务端返回的数据。 - 在前端通过动态添加`<script>`标签的方式请求服务端数据,并将函数名作为参数传递给服务端服务端返回的数据会作为函数的参数传递给前端函数。 示例代码: 服务端: ```javascript function getData(callback) { var data = { name: '张三', age: 18 }; callback(data); } app.get('/jsonp', function(req, res) { var callback = req.query.callback; getData(function(data) { res.send(callback + '(' + JSON.stringify(data) + ')'); }); }); ``` 前端: ```javascript function handleData(data) { console.log(data); } var script = document.createElement('script'); script.src = 'http://localhost:3000/jsonp?callback=handleData'; document.body.appendChild(script); ``` 2. CORS跨域 CORS(Cross-Origin Resource Sharing)是一种跨域解决方案,通过在服务端设置响应头来允许跨域请求。具体实现步骤如下: - 在服务端设置响应头,允许跨域请求。 - 在前端发送跨域请求,并在请求头中添加`Origin`字段,表示请求来源。 - 服务端接收请求,并根据请求头中的`Origin`字段判断是否允许跨域请求,如果允许则在响应头中添加`Access-Control-Allow-Origin`字段,表示允许该请求来源跨域。 示例代码: 服务端: ```javascript app.get('/cors', function(req, res) { res.set('Access-Control-Allow-Origin', '*'); var data = { name: '张三', age: 18 }; res.send(JSON.stringify(data)); }); ``` 前端: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://localhost:3000/cors'); xhr.setRequestHeader('Origin', 'http://localhost:8080'); xhr.onload = function() { console.log(xhr.responseText); }; xhr.send(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默九思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值