精华内容
下载资源
问答
  • 简单封装了一个ajax请求,一下统一处理,少写重复代码,只是一个初步的代码,没有经过优化。 $.extend({ myAjax: function (option, rollBack) { var that = this; var myOption = { type: "post", timeout:...

    简单封装了一个ajax请求,做一下统一处理,少写重复代码,只是一个初步的代码,没有经过优化。
    在这里插入图片描述

    $.extend({
        myAjax: function (option, rollBack) {
            var that = this;
            var myOption = {
                type: "post",
                timeout: 10000,
                success: function (data) {
                    data = $.eval(data);
                    if (data.hasOwnProperty("Success")) {
                        if (data.Success) {
                            if (rollBack)
                                rollBack(data);
                            else {
                                swal(data.Message, "", "success");
                            }
                        }
                        else {
                            console.info(data);
                            swal(data.Message, "", "info");
                        }
                    } else {
                        if (rollBack)
                            rollBack(data);
                    } 
                },
                error: function (data) {
                    if (data.statusText == "timeout") {
                        swal("处理数据超时,请稍后再试", "", "info");
                    } else {
                        swal("后台出现错误,请稍后再试", "", "info");
                    }
                    console.info(data);
                }
            };
            myOption = $.extend(myOption, option);
            $.ajax(myOption);
        }
    });
    

    一、AJAX有哪些功能?
    客户端的JS发起请求(浏览器上的)
    服务端的JS发送响应(Node.js上的)
    1、JS 可以设置任意请求 header 吗?

    第一部分 request.open(‘get’, ‘/xxx’)

    第二部分 request.setHeader(‘content-type’,‘x-www-form-urlencoded’)

    第四部分 request.send(‘a=1&b=2’)

    2、JS 可以获取任意响应 header 吗?

    第一部分 request.status / request.statusText

    第二部分 request.getResponseHeader() / request.getAllResponseHeaders()

    第四部分 request.responseText

    二、window.jQuery.ajax
    之前写过window.jQuery,具体内容可以看我的这篇总结:初学jQuery,从封装函数开始。而这次写window.jQuery.ajax。

    封装AJAX函数,JS代码如下:

    window.jQuery.ajax = function(obj){
        let url=obj.url
        let method=obj.method
        let body=obj.body
        let successFn=obj.successFn
        let headers=obj.heaaders
        let failFn=obj.failFn
        let request = new XMLHttpRequest()
        request.open(method, url) // 配置request第一部分
        for(let key in headers){
            let value = headers[key];
            request.setRequestHeader(key,value)
        }
        request.onreadystatechange = ()=>{
            if(request.readyState===4){
                if(request.status >= 200 && request.status < 300){
                    successFn.call(undefined,x)
                    //假如同时调用f1和f2可以这样写这里的x===request.responseText
                    //f1.call(undefined,x)
                    //f2.call(undefined,x)           
                }else if(request.status >= 400){
                    failFn.call(undefined,request)
                }
            }
        }
        request.send(body)//设置请求的第四部分
    }
    

    补充一个ES 6的知识点:解构赋值。所以上面声明的前6个let可以用解构赋值来优化代码,到文末的时候我再修改。

    var a=1
    var b=2;
    [a,b]=[2,1]    //a与b的值交换
    

    函数调用方式:

    window.jQuery.ajax({
        url:'/xxx',
        method:'post',
        body:'a=1&b=2',
        headers:{
            'content-type':'application/x-www-form-urlencoded',
            'yukaka':'25'
        },
        successFn:function sss(x){console.log(x)},
        failFn:function fff(resquest){console.log('失败了')}  
    })
    

    然而successFn 和 failFn 是我定义的。不同的程序员可能回调函数名是不一样,那么在用一个封装过的函数就需要查看手册了传什么样的参数。这不是很方便,那怎么办呢?

    三、用Promise来优化函数

    用法如下:
    
    const promise = new Promise(function(resolve, reject) {
      // ... some code
    
      if (/* 异步操作成功 */){
        resolve(value);
      } else {
        reject(error);
      }
    });
    

    用Promise优化AJAX函数:

    window.jQuery.ajax = function({url,method,body,headers}){ //这里使用ES6 解构赋值
        return new Promise(function(resolve,reject){   //resolve表示成功,reject表示失败
            let request = new XMLHttpRequest()
            request.open(method, url) // 配置request第一部分
            for(let key in headers){  //遍历,设置请求第二部分
                let value = headers[key];
                request.setRequestHeader(key,value)
            }
            request.onreadystatechange = ()=>{  //获取readyState码
                if(request.readyState===4){
                if(request.status >= 200 && request.status < 300){   //异步操作成功
                      resolve.call(undefined,request.responseText)        
                 }else if(request.status >= 400){
                      rejcet.call(undefined,request)
                  }
                }
            }
            request.send(body)//设置请求的第四部分
        })
    }
    

    函数调用方式:

    myButton.addEventListener('click', (e)=>{
        window.jQuery.ajax({
            url:'/xxx',
            method:'post',
            body:'a=1&b=2',
            headers:{
               'content-type':'application/x-www-form-urlencoded',
               'yukaka':'25'
            }    
        }).then(
            (text)=>{console.log("响应成功,调用第一个函数");return 1},//成功调用这个函数       
        ).then(
            (text)=>{console.log(text)},//成功调用这个函数,这里的参数是上一个then返回的值
            (request)=>{console.log('error')} //失败调用这个函数     
        ) 
    })
    

    关于then,第一个函数表示的是异步操作成功时调用的函数,第二个函数表示的是失败时调用的函数。同时then接受多个函数的调用,方法就是链式操作。需要注意的是成功调用这个函数,它的参数是上一个then返回的值。

    function xxx(){
        return new Promise((f1, f2) => {
            doSomething()
            setTimeout(()=>{
                // 成功就调用 f1,失败就调用 f2
            },3000)
        })
    }
    xxx().then(success, fail)
    xxx().then(success, fail).then(success, fail)  // 链式操作
    
    展开全文
  • 1.在绘图前我们需要为 ECharts 准备一个具备高宽 DOM 容器。 2.引入ECharts文件。 我这里是用组件方式 3.这里我了两个一样图,只是把代码稍微简写了一下。 4.然后将组件引入到我root.js文件里面去...

    1.在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。


    2.引入ECharts文件。

    我这里是用的组件方式


    3.这里我做了两个一样的图,只是把代码稍微简写了一下。


    4.然后将组件引入到我的root.js文件里面去。


    5.在root.js文件中用components:加载这个组件。


    6.然后在root文件里面加上刚刚引进来的组件标签,在网页上显示就是这样。


    还有一些特效(比方说更换颜色。。。) 可以去参照官网上面慢慢学,慢慢加

    展开全文
  • 我是一个设计师,而不是一个程序员。请让我拖控件(对于ASP.NET),也可以让我写点C#代码,但别让我写JavaScript。原先页面设计,需要关注如布局、色彩搭配等常规设计问题,但最近接手活都是要求高质量体验...

    写在前面的(废)话:仅为发牢骚之用,同志们基本可以无视,哈哈~!


    我是一个设计师,而不是一个程序员。请让我拖控件(对于ASP.NET),也可以让我写点C#代码,但别让我写JavaScript。


    原先做页面设计,需要关注如布局、色彩搭配等常规设计问题,但最近接手的活都是要求高质量的体验效果。对于网页,除了Flash、银光之类的嵌入插件实现特效之外,就只有JavaScript了。

    但是很无奈的是,我写代码的技术实在是不怎样。如果说写C#代码还能够勉勉强强凑合上几句像样的,最起码写起来有个智能感知,每个方法需要传入什么参数也能看得明白。可是万恶的JS可就不一样了,在VS下基本无感知效果(2010有点改善,但还是不够!),无类型检查,全靠硬性记忆,调试起来那也是得费劲九牛二虎之力。

    但是有些人就是不太安分,总想要打破常规,于是就有了本文的诞生~当当当当~!

    PS:对于技术性文章,仅供大家参考,要是文中哪里措辞不当,请原谅一位身为设计师的我的无知,不要吹毛求疵了。


    这是一堆经编译后的.NET程序集,可以引入任何.NET项目之中。但它编译后不会生成MSIL,生成的只有万恶的JS。说白了就是:用C#代码编写JavaScript。听起来是不是有些荒谬?

    这玩意称之为:“SharpKit”,其下载地址为:http://code.google.com/p/sharpkit/,目前的最新版本是V4。


    下面就开始做一个小例子试验一下吧:

    首先安装,安装过程中请关闭Visual Studio,不然你看不到它添加的新项目模板。还有安装完毕后它会让你选择版本,一个是免费版,一个是专业版,我也不知道这俩版本有什么区别,反正我选的免费版。

    如果前面没什么问题的话,打开VS应该能够看到其新增的项目模板,如图:

    在“已安装的模板项下”,就会多出来一项名为“SharpKit”的项目类型,就选择这个好了。

    在引用的程序集下可以看到多出了些必须的类库,如图:


    就这三个,简单介绍下:SharpKit.Html4就是一些代表了HTML DOM的基本对象。


    SharpKit.JavaScript封装了一些JS中常用的类型,但是都在C#原有基本数据类型的前面加上了JS前缀,以示区分。


    SharpKit.jQuery表示jQuery的上下文,也是一些类,各种类。

    好了,现在基本上心里面有个数了,反正是原来JS中有什么,它这里就有什么,只不过全换成了C#的类型和语法表示形式。

    下面我们就试着做一个小例子,很简单的,但却很常见的:如入用户注册的时候,在其填写完用户名后,需要即使检测输入的用户名是不是已经预先存在了,嗯。。大致就是这样一个场景。

    好了,新建一个页面,我也懒得起名了,VS自动创建为WebForm1.aspx...


    首先在顶部引入命名空间:

     



    然后打开页面编辑,拖一个文本框,在后面写一个span,用作提示信息的显示:


    需要注意的地方,我用了粗体字标出来了,就是在文本框输入的键盘抬起时触发,反正各位水平应该都比我强,我也不解释了。但请看最后两段粗体字标记:第一段是引入jquery的原库,SharpKit这个东西只是用来生成JS,但是你要调用jquery的方法还是需要原库的支持。第二段就要注意了,我们在这里预先引入一段不存在的脚本,位于站点根目录下res文件夹中的Test.js文件。现在是不存在,但我们可以让它运行时生成。。

    好了,前台编辑完了,转入后置代码。


    首先,我们需要写一个类,此类对应着前台res/Test.js文件,请看:


    在该类头部我们需要添加特性JsType,这就表示在编译时不是生成MSIL,而是生成JS。同时,使用JsMode枚举来指定其作用域,Global表示全局,还有4,5个枚举选项,具体干嘛的以后再研究吧。还有一个重要的参数:FileName,此参数指定:运行时生成JS文件的位置,这正好对应了前台<script type="text/javascript" src="res/Test.js">,如果这俩路径不一致,将来前台调用时找不到JS脚本文件,一定会报错的。

    然后我们就添加JS中的function,对应C#代码为一个方法,必须是静态的,但返回类型与参数列表不限,由于我们需要验证用户名,就定义一个字符串类型的参数。

    首先:创建一个ajax设置,这和原jQuery的方法中的参数列表没什么两样,然后我们设置其属性就可以了。需要注意一点的是,所有回调属性的类型都是委托,示例中的success需要赋值为一个签名如下的委托:delegate void XXX(object,string,XmlHttpRequest),总之这个委托需要三个参数,为了偷懒这里写成了lambda表达式的形式。最后使用jQuery类的静态方法ajax(),把刚才创建的AjaxSettings传入即可。


    然后我们来创建一个一般处理程序,Handler1.ashx。


    也懒得查数据库了,反正为空提示输入,不能输入admin,其他一律通过,就意思意思好了。
    这里的Response就输出了字符串到回调方法的XmlHttpRequest中,最后使用该对象的responseText即可得到响应文本。
    然后设置页面上id为"msg"的span的内容为响应文本,最后改变一下它的样式为可见。基本上这个例子就结束了。
    运行效果图如下:
    最后我们看一下生成的JS脚本到底长什么模样:
    和原来用手写的一模一样,只是代码格式不太好看,管它呢。。只要编写和调试都比之前方便了很多~就先写到这里吧。
    当然了,本文仅给那些像我一样JS菜鸟或者厌烦写JS的人准备的。如果你是JS高手,那么直接无视吧。


     

    展开全文
  • 【如何做一个简单的手机端页面的翻页】 第一步:创建移动端页面内 HTML + CSS 【注】可用弹性布局 但需要注意的是 外层盒子的定位 第二步: 思考问题 要实现怎样的效果? 手指滑动时触发事件【左右】两个方向 2....

    【如何做一个简单的手机端页面的翻页】

    第一步:创建移动端页面内 HTML + CSS 【注】可用弹性布局 但需要注意的是 外层盒子的定位

    第二步: 思考问题 要实现怎样的效果?

    1. 手指滑动时触发事件【左右】两个方向

    2.点击footer部分的下标实现切换效果

    3.点击footer部分的下标实现下标颜色变化

    第三步;编写JS代码

    添加监听事件

    document.addEventListener(‘DOMContentLoaded’,function(){

    创建一个数组用于调用数组属性值 或者 方便【数值】的更改 【注】可以用数组 /对象 但对象更方便我们的使用

    var postion = {

    startX:0,

    startY:0,

    endX:0,

    endY:0,

    baseMoveX: window.innerHeight / 3,

    index:1

    }

    获取页面元素 比不可少的一个步骤

    var tab2 = document.getElementsByClassName(‘tab2’)[0];//获取到ul 思路: 用ul定位来实现页面的切换 (ul的宽度设置成 innerWind * 4)

    var li2 = document.getElementsByClassName(‘li2’);//索引值不确定 且不写先

    var tab3 = document.querySelector(’#tab3’);

    var li3 = document.querySelectorAll(’.li3’);

    li3[0].style.color = ‘#58bc58’;//设置默认的第一个下标的颜色

    //封装一个函数用于清空下标 的颜色

    function delite(){

    for(var i = 0;i < li3.length; i++){

    li3[i].style.color = ‘’;

    }

    }

    手指事件【注】 这里的原理和拖拽一抹一样 (手指按下和 手指移动是 时 必须给给记录 光标位置)

    手指移动到位置上时候触发 记录鼠标移动坐标

    tab2.addEventListener(‘touchstart’,function(e){

    postion.startX = e.touches[0].clientX;

    postion.startY = e.touches[0].clientY;

    })

    手指移动位置胡时候触发 记录鼠标移动坐标

    tab2.addEventListener(‘touchmove’,function(en){

    postion.endX = en.touches[0].clientX;

    postion.endY = en.touches[0].clientY;

    move();//当手指滑动时触发函数 改变ul的定位

    })

    手指移开的时候定位

    tab2.addEventListener(‘touchend’,function(vent){

    move(true);//手指松开时调用调用函(函数用于判断 :滑动的距离是否超过绝对值 1.超过 (滑动到下一页) 2.不超过 (位置定位在当前页))

    })

    function move(_end){

    var x = postion.startX - postion.endX;

    var y = postion.startY - postion.endY;

    滑动效果

    if(postion.index < li2.length){//第一种情况==========left [用if 判断:索引值是 1-3的时候可以 向左滑动 改变 ul的定位 【注】因为超出会造成用户滑动出现空白页面 ]

    if(x > 0){//计算公式: 起点位置 - 终点位置 = x; 如果 x > 0 说明滑动的方向是左边

    to left

    展开全文
  • 步:创建移动端页面内 HTML + CSS 【注】可用弹性布局 但需要注意是 外层盒子定位第二步: 思考问题 要实现怎样的效果?1. 手指滑动时触发事件【左右】两方向2.点击footer部分下标实现切换效果3.点击...
  • 使用MDK5编译一个简单stm32程序(LED案例)1、MDK5环境搭建及STM32与C51支持包安装注册2、学习一个stm32实例(LED闪烁)一、创建一个新工程二、选择stm32芯片三、对环境进行初始设置四、编写代码并保存格式...
  • 前言 前不久,我有位测试朋友转去开发工作,面试遇到了一个问题,他没明白,打电话问了我。题目大概就是:在单片机裸机开发时,单片机要处理多个任务,此时你程序框架是怎样的呢?这其实是...
  • 本来这个提取信息是一件很简单的事情 但是由于感觉比较繁 再加上这部分学得也不牢固 就乘机来学习学习 麻烦大牛实现一下 现在有一个txt的英语单词的数据库 主要是 单词+音标(有可能有多个)+词性一+词性一下...
  • 在程序员的圈子里有一个话题经久不衰:程序员入职新公司后接手已有的代码,怎么处理? 程序员都有一颗工程师的心,所以当他们到一片新的场地想的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的...
  • 在程序员的圈子里有一个话题经久不衰:程序员入职新公司后接手已有的代码,怎么处理? 程序员都有一颗工程师的心,所以当他们到一片新的场地想的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的...
  • 程序员都有颗工程师的心,所以当他们到一片新的场地想的第件事就是...那么,程序员读别人的代码到底是怎样一种心理体验呢? 1、 这是什么………… 我X,太牛X了。 这是什么………… 我X,太傻X了。...
  • 产品也是,很简单的一个产品可能包含了上百个功能在里面,这些功能你可以像写代码一样,按一个线性的方式把它串起来,但是也可以一个很有架构在 里面的东西。这是考验一个人对产品的见解是什么样的。我们心中...
  • 次回顾会议开始 “要不……我们不……代码审查了……试试?”还记得当有人抛出这建议时周围同学...我们做代码审查方式比较简单直接,就是每日站会后,大家围在台开发机周围,逐一轮换讲解昨天所有提交...
  • 简单的vb玩转代码

    2012-11-06 13:36:24
    集合了很多vb代码,简单易用,内容丰富,比如怎样做一个自动关机程序,屏幕倒转程序,和一些有整蛊意义的代码,很有趣的。
  • 通过上述八篇文章,我们实现了以下简单的功能: CC产品线代码下载与部署。...通过上述基本功能的灵活运用和扩展,一个完整的项目管理系统将不再是一个难题。 动手试试吧。 驰骋工作流引擎视频公开课,将在...
  •  后来google了一下,找到了一个简单爬虫程序代码(http://www.blogjava.net/Jack2007/archive/2008/03/24/188138.html),随即试验了一下,发现确实能得到网页内容,在这里还是要谢谢代码的提供者——Jack.Wang...
  • 一个程序是怎样跑起来(一)

    千次阅读 2016-10-22 18:33:01
    找工作期间断断续续看了一些关于程序运行原理的东西,这里做个简单的小结。因为这方面还不熟悉,可能有些东西描述的不准确甚至有纰漏,还希望大家能及时指出。 首先看一下从一个我们编写的源代码程序到一个被电脑...
  • 说说一个怎样开发小程序

    千次阅读 2019-11-14 22:59:38
    微信小程序是挺火, 做一个的流程说是简单 但是开发小程序是需要一些代码基础和程序思维, 一些概念还是必须要了解, 比如 登录, 接口, 数据库, 编程语言等等 比如我是一个程序员, 我做过前端, 开发过app, 做过...
  • 有同学做毕业设计,问怎样做个简单安卓App流程,我是做服务端,也算是经常接触app,想着做app应该很简单吧,不就做个页面,会跳转,有数据不就行了,我解释了半天,人家始终没听懂,算了,我第二天问了下做安卓...
  • 怎样的辞令才可以言表我现在的心情,这几天做一个项目,平时很简单的一个功能,甚至是自己不愿意去做的功能,这几天做的时候老是出现这样或者那样的错误。都想放弃了!!!!谁有过这样的心情呢??我该怎样才可以抽...
  • c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你的工程比较大(比如二次...
  • spring中对hibernate的支持是非常强大的,从一个简单的例子就看得出来,从这个例子中我们还将对所谓的轻量级容器一些讨论。 首先需要配置数据源,通常我们有两种方式获得Connection,一是自己编写代码获得连接,...
  • 自以来,据我所知,没有一个库允许PHP开发人员在应用程序中简单地合并算术Matrix功能。 如果您使用矩阵较小,那么无需在外部库中进行编译就可以做到。 而且即使这样,PHP绑定也是有限。 您需要速度-在大型矩阵...
  • 我目前正在使用Django 1.5,无法...我正在尝试显示一个简单的index.html页面,但根据一些示例,我看到我需要将此代码放在app / views.py中:def index(request):template = loader.get_template("app/index.html")retur...
  • 我在个人APP - CayKANJI - 时候遇到一个问题: 怎样增量式地把日语汉字数据地从服务器更新到APP端,即每次用户执行更新操作时,只获取版本高于本地缓存内容。 数据格式 为了能够与mongoDB无缝结合,并...
  • //【如何做一个简单的手机端页面的翻页】//第一步:创建移动端页面内 HTML + CSS  【注】可用弹性布局 但需要注意的是 外层盒子的定位//第二步: 思考问题 要实现怎样的效果? //1. 手指滑动时触发事件【左右】两...
  • 最近需要做一些LINUX驱动上面的开发,然而尴尬的是作为一个做嵌入式的人,我竟然还没有一个属于自己的示波器,搞得很多问题都没有办法直观的感受,所以只一次我把之前做小手机的那块stm32又翻了出来,做一个简单的示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 813
精华内容 325
关键字:

怎样做一个简单的代码