ajax未分装前JS代码形式

简介: ajax未分装前JS代码形式
<script>
    // 创建XMLHttpRequest对象的实例(就是创建异步对象)
    var xhr = new XMLHttpRequest();
    // 监听请求和响应的状态
    xhr.onreadystatechange = function(){
        // 表示请求完成
        //状态等于4时响应完成,但页面404时仍可接收到响应,所以这里要status(页面状态)==200,既页面正常才给接收响应
        if(xhr.readyState == 4){
            // 表示响应成功
            if(xhr.status == 200){
                // 获取响应报文
                var resStr = xhr.responseText;
                // console.log(resStr);
                // console.log("222");
                // JSON 对象
                // 把json格式的字符串转成json对象
                var res = JSON.parse(resStr);
                console.log(res);
                // 把json对象转json字符串
                // var str = JSON.stringify(res);
                // console.log(str);
            }
        }
    }
    // 定义变量
    var url = 'http://127.0.0.1:8082/sort';
    var type = 'get';
    // 表示与服务端建立联系
    xhr.open(type,url+"?type_number=0",true);
    // 发送请求主体
    xhr.send(null);


  • 同步:是一种阻塞的线程(执行顺序 从上往下)


console.log(1);
console.log(2);
console.log(3);


输出1,2,3


  • 异步:是一种非阻塞的线程 (不按照顺序执行)


console.log(1);
setTimeout(function(){
     console.log(2);
 },0)
 console.log(3);


输出1,3,2



AJAX-v1.0封装


// 请求接口地址 url
// 请求数据方式 type  【  get / post 】
// 请求接口时提交的数据(给服务端) data 
// 请求响应回来的数据格式 dataType  【json / xml 】
// 是否异步请求数据 async 【true】
// 请求之前执行的回调函数 beforeSend:function(){}
// 请求成功执行的回调函数 success:function(res){}
// 请求失败执行的回调函数  error: function(err){}  
// 请求完成执行的回调函数  complete:function(){}
// 定义对象 $ 
var $ = {}
// 添加ajax方法
$.ajax = function (option) {
    // 判断option是否为对象
    if (typeof option === 'object') {
        // 处理ajax的逻辑
        var url = option.url;
        var type = option.type || "get";
        var async = option.async || true;
        var dataType = option.dataType;
        var data = option.data;
        // page=0&pageSize=10  服务端接收的格式
        // 处理提交给服务端的参数
        var dataStr = "";
        if (typeof data == 'object') {
            //  遍历对象
            for (var key in data) {
                dataStr += key + "=" + data[key] + "&"
            }
            // 减掉字符串最后一个字符
            dataStr = dataStr.substr(0, dataStr.length - 1);
        }
        // 判断是否跨域
        if (dataType == "jsonp") {
            // 跨域的逻辑
        } else {
            // 创建XMLHttpRequest对象的实例
            var xhr = null;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                // 兼容写法
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            // 监听请求和响应的状态
            xhr.onreadystatechange = function () {
                // 请求之前 
                if (xhr.readyState == 1) {
                    //执行请求完成的回调函数
                    if (option.beforeSend) {
                        option.beforeSend();
                    }
                }
                // 请求完成
                if (xhr.readyState == 4) {
                    // 响应成功
                    if (xhr.status == 200) {
                        // 处理数据格式的逻辑
                        // 获取响应头的Content-Type属性值
                        var cType = xhr.getResponseHeader('Content-Type');
                        // 定义变量记录后台响应的数据
                        var res;
                        // 判断响应的数据格式 dataType
                        if (cType.indexOf("json") > -1) {
                            // 把json格式字符串转json对象
                            res = JSON.parse(xhr.responseText)
                        } else if (cType.indexOf("xml") > -1) {
                            // 记录xml字符串
                            res = xhr.responseXML;
                        } else {
                            // 普通文档
                            res = xhr.responseText;
                        }
                        // 执行请求成功的回调函数
                        if (option.success) {
                            option.success(res);
                        }
                    } else {
                        // 执行请求失败的回调函数
                        if (option.error) {
                            option.error("请求失败,检查服务环境是否异常");
                        }
                    }
                    // 执行请求完成的回调函数
                    if (option.complete) {
                        option.complete();
                    }
                }
            }
            // 发起请求动作
            xhr.open(type, type == 'get' ? url + "?" + dataStr : url, async);
            // 判断请求方式是为post
            if (type == 'post') {
                // 设置请求头信息
                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            }
            // 发送请求主体
            xhr.send(type == 'get' ? null : dataStr);
        }
    }
}
相关文章
|
9月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
11月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
340 1
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
1356 9
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
1033 11
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
216 0
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~