项目实战之AJAX访问及相关问题整理

  这篇主要写在项目中AJAX的使用以及在解决登录跳转时遇到的问题,及解决办法。

  一、reqwest的使用

  reqwest 是一种浏览器异步HTTP请求的封装。支持xmlHttpRequest, JSONP, CORS, 和 CommonJS约束。

在package.json的依赖:"reqwest": "^2.0.5",且加入request.js,对reqwest再一次封装,尽量减少调用时的重复代码。

import request from ‘reqwest‘

function JSONP(url, data = {}, options = {}) {
    let _options = { data, ...options };
    return request({
        url,
        type: ‘jsonp‘,
        jsonpCallback: ‘callback‘,
        jsonpCallbackName: ‘jsonp‘,
        ..._options
    }).fail((err, msg) => {
        console.error(msg);
    }).then(resp => {
        return resp
    });
}

function GET(url, data = {}, options = {}) {
    let _options = {data, ...options };
    return request({
        url,
        ..._options
    }).fail((err, msg) => {
        this.message();
        console.error(msg);
    });
}

function POST(url, data = {}, options = {}) {
    let _options = { data, ...options };
    return request({
        url,
        method: ‘POST‘,
        ..._options
    });
}

export default {
    GET,
    JSONP,
    POST,
}

  下面是一个具体的POST请求调用:

  refresh = () => {
    this.setState({tableLoading: true});
    const hide = message.loading(‘正在查询...‘, 0);
    const url = `...`;// 拼接要请求的url地址
    const obj = {};
    obj.page = this.state.currentPage;
      request.POST(url,obj)
      .then(resp => {
        hide();
        const result = JSON.parse(resp);
        if(result.code === 100){
          this.setState({
            data: result.data,
            total: result.total,
            tableLoading: false,
          });
        }
      })
      .fail(error => {
        hide();
      })
  }

    二、登录跳转问题

由于接入公司统一的单点登录。在拦截器没有获取到cookie的信息时会自动跳转到登录页。这是正常的情况。但是在ajax请求时值会正常返回,但是不会主动跳转。主要还是因为ajax是异步跳转,核心对象是xmlHttpRequest,无法实现自动跳转。那怎么办呢?其中一种办法就是获取这种未登录状态值的返回码,根据返回码手动设置跳转。实例代码如下:

request调用省略...

.fail(error => {
        if (error.status === 401 && error.statusText === "Unauthorized") {
          let loginUrl = error.getResponseHeader("Location");
          let num = loginUrl.indexOf("?") + 1;
          let domain = loginUrl.substring(-1, num);
          console.info(domain);
          window.location.replace(domain + "ReturnUrl=http://.../");
        }
      })

  温馨提示:如果你的部署环境有nginx做代理,要注意nginx将你判断的状态码,这里就是401.作为错误处理了,返回其他的异常。

时间: 2024-10-25 15:08:10

项目实战之AJAX访问及相关问题整理的相关文章

spark 大型项目实战(七):用户访问session分析(七) --数据库连接池原理

**文章地址:http://www.haha174.top/article/details/257789** 1.谈谈数据库连接池的原理 ------------- 这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接. 2.代码 Public

spark 大型项目实战(八):用户访问session分析(八) --单例模式

**文章地址:http://www.haha174.top/article/details/253007** 一.概念: ---- java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对

项目实战 | 月薪3w的大牛为你整理的真实项目开发流程

如今,越来越多的人重视有项目经验的程序员,在一定基础上,项目经验代表着你曾经的"成就",公司也更愿意向这部分程序员抛去橄榄枝.如果你没有什么项目经验,那么一定要在网上找一个中等大小的项目,然后代码看透,逻辑理清楚,然后写到自己的简历上,至少让面试官觉得你做这个项目肯定没有问题,你能干活,所以很可能就会通过面试! 现在为大家介绍,一个项目的大体开发流程 1 大体的项目开发流程 各模块的开发流程要能讲述--技术点的用处,大体概括不需要详细讲解. 2 自己开发的模块 必须熟练开发流程.原理:

【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebFor

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的Demo需求. 按照既定的要求,我们的API

【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)

这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的Demo需求. 按照既定的要求,我们的API会提供给众多的客户端使用, 这些客户端可以是各种Web站点, APP, 或者是WinForm, WPF, Silverlight等诸如此类的应用,将来还有可能是各种Iot等物联网设备的应用,Restful API凭借其诸多优势,已经在移动互联网的时代火了一

93G通过项目学PHP+Ajax+jQuery网站开发技术 PHP+Ajax+jQuery项目实战课程

===============课程目录===============<项目一:PHP网站搭建>├1.认识PHP.mp4├2.常用编辑工具.mp4├3.开发环境搭建.mp4├4.配置虚拟主机.mp4└5.项目部署.mp4<项目二 学生信息管理>├1.PHP标记与注释.mp4├2.标识符与关键字.mp4├3.变量与常量.mp4├4.数据类型.mp4├5.输出语句.mp4├6.任务一:展示学生资料.mp4├7.date()函数.mp4├8.PHP运算符.mp4├9.运算符优先级.mp4├

Asp.Net Core 项目实战之权限管理系统(6) 功能管理

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

工业监控项目实战1—UI

背景:随着国家工业2025战略的推进,工业互联网发展将会提速,将迎来一个新的发展时期,设备的在线监控IOT应用将越来越广,这个系列文章尝试用主流的互联网开发技术,在工业互联网的监控领用做一个基于B/S架构的探索.笔者对于工业互联网监控也有几点感受就是现在好多企业项目越来越多的采用WebGL做三维动画交互式监控内容越走越复杂.越做越炫,首页就是工厂的3D鸟瞰图,模拟工厂三维布局,演示虚拟工厂效果,对于参观访问者看起来的确高大上,但是对于熟悉现在工艺设备的操作人员来说,反而不是很实用,直观2D线条图

angularJs项目实战!01:模块划分和目录组织

近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap + D3 + requirejs 的架构来实现它.angularjs早在去年6月份我就有所接触,将它应用在实验室项目的个别页面中,11月份在新浪的时候也将其推荐给了所在云事业部项目组.项目组老大程辉等人都是很有技术敏感性的人,大胆地采纳了我的建议,将之应用于原本使用dojo开发的项目前端模块上.然