ajax温习

工作中一直有写JS,也一直有用jquery,在感受jquery便利之余,也对它产生了依赖,已至于许多功能只知使用而不知原生写法,就像ajax。

今天不小心翻看了以前学习的视频,温故了一下原生ajax写法及原理,正好捣鼓捣鼓。这也是面试经常会遇到的问题,动手封装下原生的ajax函数何乐而不为了,代码如下:

function ajaxfn(obj){
            /*传入一个json对象
             *type:为请求方式,如get,post
             *data:传输的数据
             *async:异步请求,默认为true
             *dataType:返回的数据类型
             *url:这请求地址
             *fnok:为请求成功时的回调,默认传入返回的数据
             *fnerror:为请求失败的回调,默认传入当前的服务器状态码,如500,404
            */
            var xhr=null,
                type=obj.type?obj.type.toLowerCase():"get",//默认是get
                url=obj.url,
                data=obj.data?JSON.stringify(obj.data):null,
                dataType=obj.dataType?obj.dataType.toLowerCase():"text",
                async=true;//默认是异步
                if(obj.async==false){
                    async=false;
                }
            //创建XMLHttpRequest对象
            try{
                xhr=new XMLHttpRequest();
            }catch(e){
                //兼容ie6
                xhr=new ActiveXObject(‘Microsoft.XMLHTTP‘);
            }
            //连接服务器
            xhr.open(type,url,async);
            //发送请求
            if(type=="post"){//如果是post请求得先设置请求头,application/x-www=form-urlencoded适合绝大多数的应用场景
                xhr.setRequestHeader("content-type","application/x-www=form-urlencoded");
            }
            xhr.send(data);
            //监听过程
            xhr.onreadystatechange=function(){
                /*readyState请求状态
                 *0:请求未初始化(还没有调用open())
                 *1:请求已经建立,但是还没有发送(还没有调用send())
                 *2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
                 *3:请求处理中,通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
                 *4:响应已经完成;可以获取并使用服务器的响应了.
                */
                if(xhr.readyState==4){//请成完成
                    /*常用http状态码
                     *200:服务器成功返回网页
                     *304:未修改,使用缓存
                     *403:服务器拒绝请求
                     *404:请求的网页不存在
                     *503:服务器暂时不可用
                     *500:服务器内部错误
                    */
                    if(xhr.status==200){//返回成功
                        switch (dataType){
                            case "text"://接收到字符串
                                obj.fnok && obj.fnok(xhr.responseText);
                                break;
                            case "json"://接收到json字符串数据
                                obj.fnok && obj.fnok(JSON.parse(xhr.responseText));
                                break;
                            case "xml"://接收到xml格式数据
                                obj.fnok && obj.fnok(xhr.responseXML);
                                break;
                        }
                    }else{
                        obj.fnerror && obj.fnerror(xhr.status);
                    }
                }
            }
        }
    }

注:为了兼容IE6,ie7,ie8(兼容模式)支持JSON对象的stringify(),parse()方法,引入了一个json2.js文件,文件下载地址如下:https://github.com/douglascrockford/JSON-js

使用示例如下:

ajaxfn({
        type:‘get‘,//请求方式
        url:‘test.txt‘,//请求地址
        dataType:‘text‘,//返回的数据类型
        fnok:function(data){//请求成功的回调
           alert(data);
        },
        fnerror:function(data){//请求失败的回调
           alert(data);
        }
});

个人知识有限,如有错误的地方,望指正,共同学习共同进步!

时间: 2024-08-03 19:02:59

ajax温习的相关文章

框架基础:ajax设计方案(一)---集成核心请求

框架基础:ajax设计方案(一)---集成核心请求 框架基础:ajax设计方案(一)---集成核心请求 报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉唉唉唉唉 报告,我要说话!Jquery太丰富了,老子只用了几个功能,妈的,太不划算了,啊啊啊啊啊啊 ...... 好了,言归正传.对于想到整理ajax设计方案,原因如下: 从资源合理利用的角度以及

从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简的实现前后台ajax表格展示及分页实现

本来是想试着做一个简单OA项目玩玩的,真是不做不知道,一做吓死人,原来以为很简单的事情,但是做起来不是忘这就是忘那的,有的技术还得重新温习.所以还是得记录.免得哪天电脑挂了,就全没有了. 开始是看了园子里何镇汐的一系列文章,写的太好了,只看了几篇就有想写代码的冲动,很大一部分都是搬他的东西.但是我还是领误不了DDD,所以先就着三层搞搞. 我搞了两个解决方案,一个本着是想做框架,把有通用的封装了,以后要用就引dll,由于太枯燥,另一个就是想做个玩具项目,两边轮流搞搞 先是dll部分的,当然很多都没

Ajax 简述

说到Ajax大家一定不陌生,但是真要具体说说它是什么?估计给出完整定义的人应该不多. W3C上给Ajax的具体定义为: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). 也就是说AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的

前后端如何实现ajax交互 https://www.imooc.com/article/10371

慕课网 免费课程 职业路径 实战 猿问 手记 下载APP 购物车 登录 / 注册 前端入门 Java小白入门 手记 \ 一个小案例搞懂前.后端是如何进行数据交互的 一个小案例搞懂前.后端是如何进行数据交互的 原创 2016-07-12 17:08:1258940浏览32评论 分享到 小字号 fhw2087 Web前端工程师做爱做的事 14篇手记13推荐 作者的热门手记 html+css+js制作简单钟表 4813浏览64推荐5评论 html+css+js扫雷原代码,可以直接试玩了 2703浏览4

ajax+分页

<!DOCTYPE html><html><head lang="zh-cn"><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><meta http-equiv="X-UA-Compat

原生ajax

function ajax() { var ajaxData = { type: arguments[0].type || "GET", url: arguments[0].url || "", async: arguments[0].async || "true", data: arguments[0].data || null, dataType: arguments[0].dataType || "text", cont

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

ajax的几种格式

<script type="text/javascript"> $.ajax( { url:'地址', cache:'true/false',//请求是否接口是否缓存 type:'GET/POST'//请求方式 data: {"name":"才结束","age":"18"} 'name=蔡金锁&age=18&' ,//发送的数据 字符串 json dataType:'json',

AJAX学习

一.概述 ajax不是一种新的语言,它是异步的javascript和xml.传统的请求式网页在发送请求和页面响应是同步进行的,我们知道,B/S架构中在浏览器中跑的代码是javascript.HTML标签还有CSS样式文件等,我们的请求可以由javascript代码来写,服务器端的请求数据接受可以由xml来做(因为xml的优势就在于数据的传递,xml容易被解析),而ajax就是将传统的这一过程异步化,达到发出请求后不必刷新整个页面也可以得到响应,其实这一思想不仅可以用在B/S架构的程序设计中,在C