赞
踩
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>购物车结算</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- <style>
- table, td {
- border: 1px solid black;
- text-align: center;
- }
- </style>
- </head>
- <body>
- <div id="box">
- <table>
- <tr>
- <td>商品名称</td>
- <td>价格</td>
- <td>数量</td>
- <td>选择</td>
- </tr>
- <tr v-for="item in dataList">
- <td>{{item.name}}</td>
- <td>{{item.price}}</td>
- <td>{{item.number}}</td>
- <td><input type="checkbox" :value="item" v-model="checkGroup"></td>
- </tr>
- </table>
- <br>已选商品:{{checkGroup}}
- <br>总价:{{getPrice()}}
- </div>
- </body>
- <script>
- var vm = new Vue({
- el: '#box',
- data: {
- dataList: [
- {name: '今瓶没', price: 99, number: 2},
- {name: '西柚记', price: 59, number: 1},
- {name: '水壶转', price: 89, number: 5},
- ],
- checkGroup: [],
- },
- methods: {
- getPrice() {
- let sum_price = 0
- for (i in this.checkGroup) { // 这里的 i 是索引
- sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
- }
- return sum_price
- }
- }
- })
- </script>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>全选/全不选</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- <style>
- table, td {
- border: 1px solid black;
- text-align: center;
- }
- </style>
- </head>
- <body>
- <div id="box">
- <table>
- <tr>
- <td>商品名称</td>
- <td>价格</td>
- <td>数量</td>
- <td>全选/全不选<input type="checkbox" v-model="allChecked" @change="checkAll"></td>
- </tr>
- <tr v-for="item in dataList">
- <td>{{item.name}}</td>
- <td>{{item.price}}</td>
- <td>{{item.number}}</td>
- <td><input type="checkbox" :value="item" v-model="checkGroup" @change="checkOne"></td>
- </tr>
- </table>
- <br>已选商品:{{checkGroup}}
- <br>总价:{{getPrice()}}
- </div>
- </body>
- <script>
- var vm = new Vue({
- el: '#box',
- data: {
- dataList: [
- {name: '今瓶没', price: 99, number: 2},
- {name: '西柚记', price: 59, number: 1},
- {name: '水壶转', price: 89, number: 5},
- ],
- checkGroup: [],
- allChecked: false,
- },
- methods: {
- getPrice() {
- let sum_price = 0
- for (i in this.checkGroup) { // 这里的 i 是索引
- sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
- }
- return sum_price
- },
- checkAll() {
- if (this.checkGroup.length > 0) {
- this.checkGroup = []
- } else {
- this.checkGroup = this.dataList
- }
- },
- checkOne() {
- // if (this.checkGroup.length === this.dataList.length) {
- // this.allChecked = true
- // } else {
- // this.allChecked = false
- // }
- this.allChecked = this.checkGroup.length === this.dataList.length;
- }
- }
- })
- </script>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>控制加减</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css" rel="stylesheet">
- </head>
- <body>
- <div class="row">
- <div id="box" class="col-md-4 offset-md-1 text-center mt-5 ">
- <table class="table table-bordered">
- <thead>
- <tr>
- <th scope="col">商品名称</th>
- <th scope="col">单价</th>
- <th scope="col">数量</th>
- <th scope="col">全选/全不选 <input type="checkbox" v-model="allChecked" @change="checkAll"></th>
- </tr>
- </thead>
- <tbody>
- <tr v-for="item in dataList">
- <td>{{item.name}}</td>
- <td>{{item.price}}</td>
- <td>
- <button class="btn link btn-sm" @click="reduceNum(item)">-</button>
- {{item.number}}
- <button class="btn link btn-sm" @click="item.number++">+</button>
- </td>
- <td><input type="checkbox" :value="item" v-model="checkGroup" @change="checkOne"></td>
- </tr>
- <tr class="text-left">
- <td colspan="4">总价:{{getPrice()}}
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </body>
- <script>
- var vm = new Vue({
- el: '#box',
- data: {
- dataList: [
- {name: '今瓶没', price: 99, number: 1},
- {name: '西柚记', price: 59, number: 1},
- {name: '水壶转', price: 89, number: 1},
- ],
- checkGroup: [],
- allChecked: false,
- },
- methods: {
- getPrice() {
- let sum_price = 0
- for (i in this.checkGroup) {
- sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
- }
- return sum_price
- },
- checkAll() {
- if (this.checkGroup.length > 0) {
- this.checkGroup = []
- } else {
- this.checkGroup = this.dataList
- }
- },
- checkOne() {
- // if (this.checkGroup.length === this.dataList.length) {
- // this.allChecked = true
- // } else {
- // this.allChecked = false
- // }
- this.allChecked = this.checkGroup.length === this.dataList.length;
- },
- reduceNum(item) {
- if (item.number === 1) {
- item.number = 1
- } else {
- item.number--
- }
- }
- }
- })
- </script>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>v-model 之 lazy、number、trim</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- </head>
- <body>
- <div id="box">
- <input type="text" v-model="myText1" placeholder="normal"> {{myText1}}
- <br>
- <input type="text" v-model.lazy="myText2" placeholder="lazy"> {{myText2}}
- <br>
- <input type="text" v-model.number="myText3" placeholder="number"> {{myText3}}
- <br>
- <input type="text" v-model.trim="myText4" placeholder="trim"> {{myText4}}
- </div>
- </body>
- <script>
- var vm = new Vue({
- el: '#box',
- data: {
- myText1: '',
- myText2: '',
- myText3: '',
- myText4: '',
- },
- })
- </script>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Vue与后端交互 - 出现了跨域问题</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- </head>
- <body>
- <div id="box">
- <button @click="handleClick">加载数据</button>
- </div>
- </body>
- <script>
- let vm = new Vue({
- el: '#box',
- data: {},
- methods: {
- handleClick() {
- $.ajax({
- url: 'http://127.0.0.1:5000/', // 发送请求的url,本地的5000端口,是flask的默认端口
- method: 'get',
- success: (data) => {
- console.log(data)
- }
- })
- }
- }
- })
- </script>
- </html>
- from flask import Flask # 这里用轻量级的Flask框架来测试
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- print('请求来了')
- return 'Hello World'
-
-
- if __name__ == '__main__':
- app.run()
这里可以看出:前端向后端成功发送了请求,后端也成功响应了,但是前端却报错了
这是因为:
跨域问题
的存在,浏览器检测到前端和后端不是来自同一个域
,所以认为这是不安全的,所以就拦截了该资源的传递想要解决这个问题,就要实现:CORS,也就是 跨域资源共享
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Vue与后端交互 - 解决了跨域问题</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- </head>
- <body>
- <div id="box">
- <button @click="handleClick">加载数据</button>
- <p>加载的数据:{{myText}}</p>
- </div>
- </body>
- <script>
- let vm = new Vue({
- el: '#box',
- data: {
- myText: ''
- },
- methods: {
- handleClick() {
- $.ajax({
- url: 'http://127.0.0.1:5000/',
- method: 'get',
- success: (data) => {
- console.log(data)
- this.myText = data
- }
- })
- }
- }
- })
- </script>
- </html>
- from flask import Flask, make_response
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- print('请求来了')
- res = make_response('Hello World')
- res.headers['Access-Control-Allow-Origin'] = '*' # 访问控制允许的源 设置为全部
- return res
-
-
- if __name__ == '__main__':
- app.run()
- {
- "name": "Darker",
- "age": "18",
- "gender": "male"
- }
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Vue与后端交互 - json</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- </head>
- <body>
- <div id="box">
- <button @click="handleClick">加载数据</button>
- <p>加载的数据:{{myText}}</p>
- </div>
- </body>
- <script>
- let vm = new Vue({
- el: '#box',
- data: {
- myText: ''
- },
- methods: {
- handleClick() {
- $.ajax({
- url: 'http://127.0.0.1:5000/',
- method: 'get',
- success: (data) => {
- console.log(data)
- this.myText = data
- }
- })
- }
- }
- })
- </script>
- </html>
- import json
-
- from flask import Flask, jsonify
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- print('请求来了')
- with open('file.json', mode='rt', encoding='utf-8') as f:
- dic = json.load(f)
- res = jsonify(dic)
- res.headers['Access-Control-Allow-Origin'] = '*'
- return res
-
-
- if __name__ == '__main__':
- app.run()
提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应
它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源
- fetch('http://example.com/movies.json')
- .then(function(response) {
- return response.json();
- })
- .then(function(myJson) {
- console.log(myJson);
- });
- {
- "name": "Darker",
- "age": "18",
- "gender": "male"
- }
- import json
-
- from flask import Flask, jsonify
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- print('请求来了')
- with open('file.json', mode='rt', encoding='utf-8') as f:
- dic = json.load(f)
- res = jsonify(dic)
- res.headers['Access-Control-Allow-Origin'] = '*'
- return res
-
-
- if __name__ == '__main__':
- app.run()
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Vue与后端交互 - fetch</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
- </head>
- <body>
- <div id="box">
- <button @click="handleClick">加载数据</button>
- <p>加载的数据:</p>
- <ul>
- <li >姓名:{{name}}</li>
- <li >年龄:{{age}}</li>
- <li >性别:{{gender}}</li>
- </ul>
- </div>
- </body>
- <script>
- let vm = new Vue({
- el: '#box',
- data: {
- name:'',
- age: '',
- gender: ''
- },
- methods: {
- handleClick() {
- fetch('http://127.0.0.1:5000/').then(response => {
- return response.json()
- }).then(json => {
- console.log('从后端获取的json数据', json) // success 获取的数据
- this.name = json.name
- this.age = json.age
- this.gender = json.gender
- }).catch(ex => {
- console.log('出现了异常', ex) // 抛出异常
- })
- }
- }
- })
- </script>
- </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。