随笔 - 47  文章 - 0 评论 - 21 阅读 - 13万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
function ajax(options) {
    //请求参数
    options = {
        //类型
        type: options.type || "Post",
        //地址
        url: options.url || "",
        //超时时间
        timeout: options.timeout || 5000,
        //完成函数
        onComplete: options.onComplete || function () { },
        //错误函数
        onError: options.onError || function () { },
        //执行成功
        onSuccess: options.onSuccess || function () { },
        //传递数据
        data: options.data || "",
        //返回的数据类型
        datatype: options.datatype || "string",
    };
    //创建请求对象
    var xml = new XMLHttpRequest();
    //初始化异步请求
    xml.open(options.type, options.url, true);
    //请求超时时间
    var timeoutLength = options.timeout;
    //请求是否成功
    var requestDone = false;
    //初始化一个超时执行回调函数,用于取消请求
    setTimeout(function () {
        requestDone = true;
    }, timeoutLength);
 
    //监听文档状态的更新
    xml.onreadystatechange = function () {
        //保持等待,直到数据完全加载,并保证请求并未超时
        if (xml.readyState == 4 && !requestDone) {
            //检查请求是否成功
            if (httpSuccess(xml)) {
                //以服务器返回的数据作为参数调用成功回调函数
                options.onSuccess(httpData(xml, options.datatype));
            } else {
                //发生错误时执行错误回调函数
                options.onError();
            }
            //执行完成回调函数
            options.onComplete();
            //清理文档,避免内存泄露
            xml = null;
        }
    };
    //建立与服务器的连接
    xml.send();
 
    //判断http是否响应成功
    function httpSuccess(r) {
        try {
            //如果得不到服务器状态且我们正在请求本地文件,认为成功
            return !r.status && location.protocol == "file:" ||
                //所有的200~300状态码表示成功
                (r.status >= 200 && r.status < 300) ||
                //文档未修改也表示成功
                r.status == 304 ||
                //Safari在文档未修改时返回空状态
                navigator.userAgent.indexOf("Safari") >= 0
                    && typeof r.status == "undefined";
        } catch (e) {
            //若检查状态失败,则假定请求是失败的
            return false
        }
    }
 
    //从http响应中解析正确的数据
    function httpData(r, type) {
        //获取content-type的首部
        var ct = r.getResponseHeader("content-type");
        //若没有提供类型,判断服务器返回的是否是xml形式
        var data = !type && ct && ct.indexOf("xml") >= 0;
        //若是,获得xml文档对象,否则返回文本内容
        data = type == "xml" || data ? r.responseXml : r.responseText;
        //若指定类型是 script ,则以Javascript形式返回文本
        if (type == "script") {
            eval.call(window, data);
        } else if (type == "json") {
            data = eval(data);
        }
        //返回响应数据
        return data;
    }
}

  使用

1
2
3
4
5
6
7
8
9
10
11
ajax({
            url: "/Home/GetTestData",
            type: "get",
            datatype: "json",
            onSuccess: function (result) {
                 alert(result);
            },
            onError: function (xhr) {
                var x = xhr;
            }
        });

  

posted on   小小中  阅读(260)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示