封装好的Ajax请求函数

简介: 封装好的Ajax请求函数

 

function ajax( options ){  // options是一个对象,包含请求所需的参数
  // 为ajax函数设置默认值,有些不需要传递的参数或者不需要经常改变的参数给一个  默认值,需要改变的时候再用传递进去的值覆盖默认值
  var defaults = { 
       type:'get',
       url:'',
       async:true,
       data:{},
       header:{
         'content-type':'application/x-www-form-urlencoded'
       },
       success:function(){},
       error:function(){}
  };
  // 使用用户传递的参数替换默认值参数
  Object.assign(defaults,options);  // assign方法实现浅拷贝
  // 创建xhr对象
  var xhr = new XMLHttpRequest();  // 这里没有考虑兼容性,考虑浏览器兼容性的创建过程可以看“Ajax常见面试题整理中的3”
  // 参数拼接变量
  var params = '';
  // 循环参数
  for(var attr in defaults.data){  //data里面存的是传给服务器的参数
      // 参数拼接
      params += attr + '=' + defaults.data[attr]+'&';
      // 去掉参数中的最后一个& 
      params = params.substr(0,length-1); //substr不包含右边界值
  };
  // 参数拼接完了就需要判断一下请求方式,从而决定传参的形式
  if(defaults.type == 'get'){
       // 将参数拼接在url地址的后面
       defaults.url += '?'+params ;
  };
  // 配置ajax请求
  xhr.open( defaults.type,defaults.url,defaults.aysnc );
  // 如果请求方式为post  
  if( defaults.type == 'post'){
       // 设置请求头
       xhr.setRequestHeader('Content- Type',defaults.header['Content-Type'] );
       // 如果想服务器端传递的参数类型为json
       if( defaults.header['Content-Type']=='application/json'){
           // 将json对象转换成json字符串
           xhr.send(JSON.stringify(defaults.data));
       }else{
           // 发送请求
           xhr.send('params');
    }else{
        xhr.send();
    };
    // 请求加载完成
    xhr.onload = function(){
      // 获取服务器端返回数据的类型
      var contentType = xhr.getResponseHeader('Content-Type');
      // 获取服务端返回的响应数据
      var responseText = xhr.responseText;
      // 如果服务端返回的是json数据类型
      if( contentType.includes('application/json')){
           // 将json字符串转换为json对象
           responseText = JSON.parse(responseText);
      };
      // 如果请求成功
      if(xhr.status == 200 ){
          // 调用成功回调函数,并且将服务端返回的结果传递给成功回调函数
          defaults.success(responseText,xhr);
      }else{
          // 调用失败回调函数并且将xhr对象传递给回调函数
          defaults.error(responseText,xhr);
      }
    }
    // 当网络中断时
    xhr.onerror = function(){
       // 调用失败回调函数并且将xhr对象传递给回调函数
       defaults.error( xhr );
    }
}

image.gif

相关文章
|
4月前
|
JSON 前端开发 JavaScript
axios请求成功而$.ajax却不行排错
axios请求成功而$.ajax却不行排错
43 2
|
4月前
|
前端开发
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
|
19天前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
29 10
React技术栈-react使用的Ajax请求库实战案例
|
19天前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
21 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
2月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
97 24
|
3月前
|
前端开发 Python
Django框架中Ajax GET与POST请求的实战应用
Django框架中Ajax GET与POST请求的实战应用
|
2月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
73 0
|
4月前
|
JSON 前端开发 JavaScript
Fetch API与Ajax请求
Fetch API是JavaScript的一种新方法,用于网络请求,提供简洁的Promise-based语法和更多功能,如处理头、取消请求及跨域支持,比Ajax更强大。尽管不完全替代Ajax,尤其在老浏览器或需要底层控制时,Fetch API仍是现代浏览器中获取资源的优选工具。例如,以下代码展示了如何使用Fetch API进行GET和POST请求。
|
3月前
|
JSON 前端开发 JavaScript
Django——Ajax请求
Django——Ajax请求
|
4月前
|
XML JSON 前端开发
学习Ajax使用异步对象发送请求
Ajax,全称Asynchronous JavaScript and XML(异步JavaScript和XML),是一种用于创建更好、更快以及交互性更强的Web应用程序的技术。
49 3