zoukankan      html  css  js  c++  java
  • jQuery中$.ajax的实现

    01 // 执行AJAX请求的通用函数
    02 //带一个参数,是包含一系列选项的对象
    03 function ajax(options){
    04 //如果用户没有提供某个选项则用默认值代替
    05 options = {
    06 //HTTP请求的类型
    07 type: options.type || “POST”,
    08 //请求的URL
    09 url: options.url || “”,
    10 //请求超时时间
    11 timeout: options.timeout || 5000,
    12 //请求失败,成功或完成(无论成功或者失败都会执行)时执行的函数
    13 onComplete: options.onComplete ||
    14 function(){},
    15 onError: options.onError ||
    16 function(){},
    17 onSuccess: options.onSuccess ||
    18 function(){},
    19 //服务器返回的数据类型,这一默认值用于判断服务器返回的数据并做相应动作
    20 data: options.data || “”
    21 };
    22
    23 //创建请求对象
    24 var xml = new XMLHttpRequest();
    25 //初始化异步请求
    26 xml.open(options.type, options.url, true);
    27 //我们在请求后等待5秒,超时则放弃
    28 var timeoutLenght = options.timeout;
    29
    30 //记录请求是否成功完成
    31 var requestDone = false;
    32
    33 // 初始化一个5秒后执行的回调函数,用于取消请求 (如果尚未完成的)
    34 setTimeout(function(){
    35 var requestDone = true;
    36 }, timeoutLenght);
    37
    38 // 监听文档状态的更新
    39 xml.onreadystatechange = function(){
    40 //保持等待,直到数据完全加载,并保证请求未超时
    41 if (xml.readyState == 4 && !requestDone) {
    42 //检查是否请求成功
    43 if (httpSuccess(xml)) {
    44 //以服务器返回的数据作为参数调用成功回调函数
    45 options.onSuccess(httpData(xml, options.type));
    46 }
    47 else {
    48 options.onError();
    49 }
    50 //调用完成回调函数
    51 options.onComplete();
    52 //为避免内存泄漏,清理文档
    53 xml = null;
    54 }
    55 };
    56
    57 //建立与服务器连接
    58 xml.send();
    59
    60 //判断HTTP响应是否成功
    61 function httpSuccess(r){
    62 try {
    63 //如果得不到服务器状态,且我们正在请求本地文件,认为成功
    64 return !r.status && location.protocol == “file:” ||
    65
    66 //所有200到300间的状态表示为成功
    67 (r.status >= 200 && r.status < 300) ||
    68
    69 //文档未修改也算成功
    70 r.status == 304 ||
    71
    72 //Safari 在文档未修改时返回空状态
    73 navigator.userAgent.indexOf(“Safari”) >= 0 && typeof r.status == “undefined”;
    74 }
    75 catch (e) {
    76 }
    77 //若检查状态失败,就假定请求是失败的
    78 return false;
    79 }
    80
    81 //从HTTP响应中解析正确的数据
    82 function httpData(r, type){
    83 //获取 content-type 的首部
    84 var ct = r.getResponseHeader(“content-type”);
    85
    86 //若是没有提供默认的类型,判断服务器返回的是否是xml形式
    87 var data = !type && ct && ct.indexOf(“xml”) >= 0;
    88
    89 //若是,获得xml文档对象,否则返回文本内容
    90 data = type == “xml” || data ? r.responseXML : r.responseText;
    91
    92 //若指定类型是“script”,则以Javascript形式执行返回文本
    93 if (type == “script”)
    94 eval.call(window, data);
    95 //返回响应数据(或为XML文档,或为文本字符串)
    96 return data;
    97
    98 }
    99 }

  • 相关阅读:
    php 计算两个日期相差天数
    Linux系统查找清理磁盘大文件
    虚拟机重启网络服务失败,当查看状态显示错误Failed to start LSB......
    c++简单编写线性表(实验)
    学校的c++程序课程设计(简单的写法 并无太多c++的特色)
    C语言简单实现链栈基本几个功能
    简单用数组模拟顺序栈(c++)
    详细易懂的二叉树遍历(先中后)
    大数加法之C语言函数法(只有正数版)
    有关Java垃圾回收的几个问题
  • 原文地址:https://www.cnblogs.com/luluping/p/1459852.html
Copyright © 2011-2022 走看看