简单的封装ajax函数

//封装一个ajax函数

  // 参数约定:
    // url  必须
    // method 可选, 默认是 get
    // data 可选, 可以是字符串, 也可以是对象( 键值对 )
    // fn 处理响应回来的数据, 函数需要有参数, 即响应回来的数据

function ajax( options ){
    //定义参数
   var url=options.url,
        method=options.method || "GET",
        data=options.data || null,
        fn=options.fn || null

    //首先转换data参数
    var tmp=[];
    //如果传入的是字符串,不需要处理,如果传入的是一个键值对,转换成字符串
    if(data != null && typeof data =="object"){
        for( var k in data){
            tmp.push(k + "=" + data[k] );
        }
        data=tmp.join("&");
    }

    //开始发送ajax请求
    var xhr=new XMLHttpRequest();
    xhr.open(method,url);
    //如果请求方式是post  设置头
    if( method.toLowerCase() == "post"){
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    }
    xhr.onreadystatechange=function(){
        if( xhr.readyState===4 && xhr.status==200){
            if(typeof fn =="function"){
                fn( xhr.responseText );
            }
        }
    };
    xhr.send(data);
};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

设计模式之代理模式(Proxy模式)代理模式的引入代理模式的实例程序代理模式分析

Proxy是代理人的意思,指的是代替别人进行工作的人。当不一定需要本人亲自去做的工作的时候,就可以寻找代理人去完成。 但在代理模式中,往往是相反的,通常是代理...

862
来自专栏武培轩的专栏

Runtime源码解析(JDK1.8)

package java.lang; import sun.reflect.CallerSensitive; import sun.reflect.Refle...

3509
来自专栏向治洪

android classloader双亲委托模式

概述 ClassLoader的双亲委托模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类加载器) ;...

2438
来自专栏二进制文集

JDK源码分析 多线程

对于JDK源码分析的文章,仅仅记录我认为重要的地方。源码的细节实在太多,不可能面面俱到地写清每个逻辑。所以我的JDK源码分析,着重在JDK的体系架构层面,具体源...

832
来自专栏技术记录

Protobuf3语法详解

7985
来自专栏西安-晁州

redis操作基本命令

Redis—— Remote Dictionary Server,它是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Val...

2720
来自专栏无题

堆外内存概要

DirectByteBuffer JDK中使用 DirectByteBuffer对象来表示堆外内存,每个 DirectByteBuffer对象在初始化时,都会创...

2394
来自专栏coolblog.xyz技术专栏

MyBatis 源码分析 - 映射文件解析过程

在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程。由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因。所以我将映射文件解析过程的分...

2581
来自专栏欧阳大哥的轮子

深入解构iOS系统下的全局对象和初始化函数

事件源于接入了一个第三方库导致应用出现了大量的crash记录,很奇怪的是这么多的crash居然没有收到用户的反馈信息! 在这个过程中每个崩溃栈的信息都明确的指向...

1812
来自专栏JMCui

Redis学习一(基础入门).

一、前言     Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、key-Value 的数据库、并提供多...

3805

扫码关注云+社区