JSON 和HTTP&AJAX前后台交互案例图解

Posted D_evin_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON 和HTTP&AJAX前后台交互案例图解相关的知识,希望对你有一定的参考价值。

案例在文章最后

JSON

1. JSON 简述

JSON是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。

2. JSON 语法规则

JSON 是一个序列化的对象或数组。属性名(key)用双引号包裹,值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。

(1)对象结构

{

"key1": "value1",

"key2": "value2"

}

(2)数组结构

[{

"key1": "value1",

"key2": "value2"

},

{

"key3": "value3",

"key4": "value4"

}]

3. JSON和JS对象的关系

JSON是 JS的一种简单数据格式,JSON是javascript原生格式,它是一种严格的JS对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号。

其中,eval()函数是自行参数内,字符串的js代码,如:eval("2+2")

4. JSON字符串和JSON对象的区别

JSON字符串:指的是符合JSON格式要求的JS字符串。

需要注意的是,服务器的返回数据,以及前台向后台的传输数据都可能是JSON字符串,而不是JSON对象。

var jsonStr = "{id:'001',name:'tom',age:18}";

JSON对象:指符合JSON格式要求的JS对象。

var jsonObj = { id: '001', name: 'tom', age: 18 };

5. 转换方式

为什么要使用JSON的转化,因为前后台数据的传输均为JSON字符串格式,如不通过解析和转化将无法使用。

`JSON.stringify()`用于将一个值转为字符串。该字符串应该符合JSON格式,并且可以被`JSON.parse`方法还原。

var json = JSON.stringify({ a: 'Hello', b: 'World' });

//结果是 '{"a": "Hello", "b": "World"}'

`JSON.parse()` 用于将JSON字符串转化成对象。

var obj = JSON.parse('{"a": "Hello", "b": "World"}');

//结果是 {a: 'Hello', b: 'World'}

前后端交互案例:

准备:1.新版谷歌浏览器,新版vscode

2.下载安装新版本 vscode 并安装相关插件,点击左侧扩展直接搜索下载

 3.创建项目目录exercise

4.安装npm install express,右击目录exercise选择在集成终端中打开,在终端输入npm install express回车。

安装npm install express时项目目录会创建node_modules目录。

 data.j代码:图片要换成自己电脑上图片的路径

var data = [
{"name":"妙蛙种子","id":"001","url":"http://media.52poke.com/wiki/thumb/2/21/001Bulbasaur.png/300px-001Bulbasaur.png","attr":[12,4],"capture":5.9},
{"name":"妙蛙草","id":"002","url":"http://media.52poke.com/wiki/thumb/7/73/002Ivysaur.png/300px-002Ivysaur.png","attr":[12,4],"capture":5.9},
{"name":"妙蛙花","id":"003","url":"http://media.52poke.com/wiki/thumb/a/ae/003Venusaur.png/300px-003Venusaur.png","attr":[12,4],"capture":5.9},
{"name":"小火龙","id":"004","url":"http://media.52poke.com/wiki/thumb/7/73/004Charmander.png/300px-004Charmander.png","attr":[10],"capture":5.9}
]
module.exports=data;

 app.js代码:

//1.引入express
var express = require('express');
//引入data.js
var poke=require('./data.js');
//2.创建web服务器,实例化
var app = express();
//3.设置端口
app.listen(8080);
/* 4.静态资源托管express.static()将静态资源的
目录放入到参数中,不是必须只有这一个文件目录可以托管,
也不是只有这一个文件目录可以 */
app.use(express.static('./public'));

//01_show.html接口。返回一个小精灵数据
app.get('/pokeshow',(req,res)=>{
    //Number()将前台传来的id转为数字类型
    var id=Number(req.query.id);
    //将转好数字的id放在poke数组中当索引使用但要-1
    //此时的datajson是一组小精灵的数据,对象形式的
    var datajson=poke[id-1];
    //找好的数据传回前台
    res.send(datajson);
})

//02_list.html接口。
//所有小精灵给到前台
app.get('/pokelist',(req,res)=>{
    res.send(poke);
})

01_show.html代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style></style>
</head>
<body>
  <!-- 输入框,输入小精灵的id编号,通过点击搜索,查找到小精灵的数据 -->
  <input type="text" placeholder="小精灵的id编号" id="pokeid">
  <button id="btn">搜索</button>
  <div id="show"></div>
  <script>
    //1.获取所有元素
    var pokeid = document.getElementById('pokeid');
    var btn = document.getElementById('btn');
    var show = document.getElementById('show');
    //2.事件触发
    btn.onclick = function () {
      //(1)获取用户输入的数字
      var idval = pokeid.value.trim();
      //(2)调用ajax函数并把数字传入到ajax中
      ajax(idval);
    }
    function ajax(i) {
      //创建xhr对象
      var xhr = new XMLHttpRequest();
      //监听并返回值
      xhr.onreadystatechange = function () {
        //判断readyState是4的时候才可以拿到后台的数据
        if (xhr.readyState == 4) {
          //判断返回内容成功,再接收数据
          if (xhr.status >= 200 && xhr.status < 300) {
            // 使用JSON.parse将字符串格式的对象,转换成真的对象
            var result = JSON.parse(xhr.responseText);
            console.log(result)
            //展示这个方法,放在外面,在里面调用
            showlist(result)
          }
        }
      }
      //设置请求信息
      xhr.open('GET', `/pokeshow?id=${i}`, true);
      //发送请求
      xhr.send();
    }
    //显示的函数show,需要接受后台的数据
    function showlist(r) {
      show.innerHTML = `<h2>${r.id}</h2>
      <h3>${r.name}</h3>
      <img src="./poke/${r.id}.png" width="100">`;
    }
  </script>
</body>
</html>

02_list.html代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        li{
           float: left;
           margin-left: 10px;
           padding:0 40px;
           border:1px solid paleturquoise;
        }
    </style>
</head>
<body>
    <ul id="show"></ul>
    <script>
        //1.获取元素
        var show=document.getElementById('show');
        //2.调用ajax
        ajax();
        //ajsx函数 接口地址
        function ajax(){
            var xhr=new XMLHttpRequest();
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4){
                    if(xhr.status>=200 && xhr.status<300){
                        var result=JSON.parse(xhr.responseText);
                        console.log(result)
                        //专门展示的函数(套路)
                        showlist(result);
                    }
                }
            }
            xhr.open('GET','/pokelist',true);
            xhr.send();
        }
        function showlist(data){
            /*套路1:为了保证for循环里的新增数据是累加的,
            因此在for循环外线创建一个空的塑料袋准备装打包后的所有内容 */
            var str='';
            //套路2:使用for循环遍历参数数据,主要是参数的长度
            for(var i=0;i<data.length;i++){
                /*套路3:在for循环内,把每一个标签或者嵌套标签都用模
                板字符串抱起来,并在其中填入参数的动态数据,最后集体
                交给(+=)空字符串进行累加收集 */
                str+=`<li>
                    <h2>${data[i].id}</h2>
                    <h3>${data[i].name}</h3>
                    <img src="./poke/${data[i].id}.png" width="50">
                    </li>`;
            }
            console.log(str)
            /* 套路4:最后把打包好的空字符串,给页面上的一个元素插入进
            去使用元素的innerHTML */
            show.innerHTML=str;
        }
    </script>
</body>
</html>

右击项目exercise打开终端输入node app.js回车。

 打开谷歌浏览器,地址栏输入127.0.0.1:8080/01_show.html 回车输入1点击搜索。

 

输入127.0.0.1:8080/02_list.html 回车。

 

 

以上是关于JSON 和HTTP&AJAX前后台交互案例图解的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax()方法和后台交互

基于Ajax技术的前后端Json数据交互方式实现

前端与后端有哪几种ajax交互方法

JavaScript入门:前后端交互基础(DOM,JSON,AJAX)

Ajax&Json —— Ajax

ajax 异步请求,json前台后台交互