2019.8.27更新:《Vue.js实战一书p231练习试做(3)

练习: 学习XMLHttpRequest (即XHR )相关知识,开发一个简单的 ajax 插件,用于异步获取服务端数据。

此插件代码如下:(已测试可正常使用)

const install=function(Vue,opotions={}){
    const ajax=new Vue({
        data(){
            return{
                options:null,
                data:‘‘,
                type:‘GET‘,
                url:‘‘,
                success:function(){},
                error:function(){},
                xhr:null

            };
        },
        methods:{
            initialize(options){
                this.setOptions(options);
                //this.data=this.setData(this.options.data);
                this.data=this.options.data;
                this.type=this.options.type;
                this.url=this.options.url;
                this.success=this.options.success;
                this.error=this.options.error;
                this.xhr=this.createXHR();
                this.start();
            },
            setOptions(options){
                this.options={
                    type:‘GET‘,
                    data:‘‘,
                    success:function(mes){alert(mes)},
                    error:function(mes){alert(mes)},
                    url:‘‘
                };
                Object.assign(this.options,options);
                //for(var p in options) this.options[p]=opotions[p];
            },
            //把传入的数据设置为key1=value1&key2=value2格式的字符串,如果
            //是使用FormData对象生成数据,则可以不用,不然会出错
            setData(data){
                let localdata=[];
                for(let i in data){
                    localdata.push(encodeURIComponent(i) +
                    ‘=‘+encodeURIComponent(data[i]));
                }
                localdata=localdata.join(‘&‘);
                return localdata;
            },
            createXHR(){
                const _this=this;
                const xhr = new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if(xhr.readyState==4){
                        const status=xhr.status;
                        if(status>=200 && status<300){
                            _this.success &&
                            _this.success(xhr.responseText);
                        }else{
                            _this.error &&
                            _this.error(status);
                        }
                    }
                };
                return xhr;
            },
            get(url){
                this.xhr.open(‘get‘,url+‘?‘+this.data,true);
                this.xhr.send(null);
            },
            post(url,mes){
                this.xhr.open(‘post‘,url,true);
                //this.xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘);
                this.xhr.send(mes);
            },
            start(){
                switch(this.type.toUpperCase()){
                    case ‘GET‘:
                        this.get(this.url);
                        break;
                    case ‘POST‘:
                        this.post(this.url,this.data);
                        break;
                }
            }
        },
        created(){
            this.initialize();
        }
    });
    Vue.prototype.$ajax=ajax;
};
export default install;

使用方法:

在main.js中导入

import VueAjax from ‘./components/vue-ajax‘;
Vue.use(VueAjax);

在 .vue 格式文件中,

<template>
  <div id="app">
    <form id="user-info">
        <label for="user-name">Name:</label><input type="text" id="user-name" name="user-name" /><br />
        <label for="user-email">Email:</label><input type="text" id="user-email" name="user-email" /><br />
        <input type="button" value="Submit" @click="submitData" />
    </form>
  </div>
</template>
<script>
export default {
  methods:{
    submitData(){
      var form=document.getElementById(‘user-info‘);
      var objs={
        type:‘post‘,
        url:‘postexample.php‘,
        data:new FormData(form)
      }
      this.$ajax.initialize(objs);
    }
  },

}
</script>

可以直接调用get/post,传入url/data

也可以调用Initialize,传入一个参数对象

this.$ajax.initialize(objs);
this.$ajax.get(‘example.txt‘);
this.$ajax.post(‘postexample.php‘,new FormData(form));

原文地址:https://www.cnblogs.com/sx00xs/p/11421460.html

时间: 2024-10-10 13:21:41

2019.8.27更新:《Vue.js实战一书p231练习试做(3)的相关文章

《Vue.js实战一书p231练习试做

练习: 学习XMLHttpRequest (即XHR )相关知识,开发一个简单的 ajax 插件,用于异步获取服务端数据. 解答: 书作者提供了一段代码作为参考,实际上是要求我们把这段代码封装起来,此插件会提供 2 个接口:get 和 post,接受一个字符串参数:url const install = function(Vue, options={}){ //辅助函数,用于创建 xhr对象,添加readystatechange事件处理函数 function createXhr(){ const

vue.js不支持IE8你们是怎么做的?

作者:知乎用户链接:https://www.zhihu.com/question/51468145/answer/126207448来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 如果您的客户群体IE8用户占据较大的比例,不建议使用vue,angular等等现在流行的前端框架,jquery和easyUI就挺好的.实在想用新技术和新的模式,其他答猪说过的Avalon以及 Polyfill就可以. ================以下是吐槽部分============

《Vue.js实战》一书 p117 练习 1&amp; 2 (2019.12.19)

(最近学了下angular的教程,又回过头来看 vue.js实战一书...) 练习1 :在输入框聚焦时,增加对键盘上下按键的支持,相当于加1 和减 1 练习2 :增加一个控制步伐的prop--step,比如设置为10 ,点击加号按钮, 一次增加10 . ps:只添加了少量代码,即完成了此2练习! -----------------------------------------------------------------------------------------------------

Vue.js—快速入门

Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 的一些语法和 AngularJS 的很相似 (例如 v-if vs ng-if).因为 AngularJS 是 Vue 早期开发的灵感来源.然而,AngularJS 中存在的许多问题,在 Vue 中已经得

Vue.js入门

之前一直用的是jQuery,jQuery手动操作DOM导致性能不够好,因为DOM修改导致的页面重绘.重新排版!重新排版是用户阻塞的操作,同时,如果频繁重排,CPU使用率也会猛涨! Vue.js是数据驱动的,它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新. 一个简单的例子: 一个页面需要通过异步请求获取数据然后展示在页面上,用jQuery方法处理是: $(function(){ var $jsontip = $(

Vue.js 功课1

好久没更新博客了,但还是回来了. 我是个朴素的人,当大家在双十一在淘宝急着抢货剁手的时候,我只是默默买了本Vue.js 的纸质书 最近想系统的去学习一下前端和小程序开发. 好了,废话不多说.读一读文档   做做功课. 声明渲染:el指的元素名,每个元素都要创建一个Vue对象???? 指令绑定:v-bind 属性被称为指令.指令带有前缀 v-,以表示它们是 Vue 提供的特殊属性.可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为. 简言之,这里该指令的作用是:"将这个元素节点的 t

为什么我们从Angular 2迁移到Vue.js(为什么我们没有选择React)

在Rever(www.reverscore.com),我们刚刚使用Vue.js发布了我们的Web客户端的新版本.经过641次提交和16周的紧张开发,我们非常自豪之前做出的决定.8个月前,我们的前端在使用Angular 2.确切地说,它使用的是Angular 2 beta 9.这是一个由外包公司编写的产品,我们从很多层面上都没有完全满意,从UX / UI到架构,在某种程度上,与Angular 2本身有很大的关系. 在之前,我承认Angular 2 beta 9是与Angular 2.0不同的产品,

某课网 - Vue.js 源码全方位深入解析(同步更新)

第1章 准备工作介绍了 Flow.Vue.js 的源码目录设计.Vue.js 的源码构建方式,以及从入口开始分析了 Vue.js 的初始化过程. 1-1 课程简介1-2 准备工作1-3 认识 Flow-文档1-4 认识 Flow1-5 Vue.js 源码目录设计-文档1-6 Vue.js 源码目录设计1-7 Vue.js 源码构建-文档1-8 Vue.js 源码构建1-9 从入口开始-文档1-10 从入口开始 第2章 数据驱动详细讲解了模板数据到 DOM 渲染的过程,从 new Vue 开始,分

Vue.js 源码全方位深入解析(同步更新中)

第1章 准备工作介绍了 Flow.Vue.js 的源码目录设计.Vue.js 的源码构建方式,以及从入口开始分析了 Vue.js 的初始化过程. 1-1 课程简介1-2 准备工作1-3 认识 Flow-文档1-4 认识 Flow1-5 Vue.js 源码目录设计-文档1-6 Vue.js 源码目录设计1-7 Vue.js 源码构建-文档1-8 Vue.js 源码构建1-9 从入口开始-文档1-10 从入口开始第2章 数据驱动详细讲解了模板数据到 DOM 渲染的过程,从 new Vue 开始,分析