美文网首页
浅谈 Ajax

浅谈 Ajax

作者: BGING | 来源:发表于2018-03-22 23:17 被阅读0次

最常用的技术,也最容易被忽略的地方。遇到一个问题:当使用 ajax 的时候请求后台,抛出异常。这时候就想到了用捕获状态码。但是 3xx 的状态码是不能捕获... 郁闷三分钟

例子一

后台用 session 保存用户登录的信息,用户每次请求的时候后台都会校验 session 过期没有。如果没有登录或者是 session 过期了后台设置跳转登录页面(后台在 header 中设置 Location )。请求的时候有可能返回字符串 or 跳转新的地址。

// 跳转新的界面,状态码 303可以在浏览器里看到,并且 ajax 会走 error 方法; XMLHttpRequest.status =0
// XMLHttpRequest.readyState = 0  相当于是新发送的请求状态(readyState == 0)
// 只是跳转页面后响应请求时候也是走 error 方法,并且 XMLHttpRequest.status = 200 , //XMLHttpRequest.readyState = 4
 $.ajax({
        cache: false,
        url: url,
        data: params,
        type: method,
        contentType: contentType,
        statusCode: {
            404: function() {
                console.log("404");
            }
        },
        success: function(data, textStatus, xhr) {
            if (success instanceof Function) {
                success(data, textStatus, xhr);
            }
        },
        error: function(xhr, textStatus, error) {
            if (error instanceof Function) {
                error(xhr, textStatus, error);
            } else if (xhr.status == 0 && xhr.readyState == 0) {
                loginInApp();// 判断是 303 请求
            } else if (xhr.status == 200 && xhr.readyState == 4) {
                showUserName(xhr.responseText); // 判读是 303 之后请求成功
            } else {
                defaultAlert("出状况啦,请重新打开浏览器.");
            }
        },
        complete: function(xhr, status) {
            if (complete instanceof Function) {
                complete(xhr, status);
            }
        }
    });

因此,如果是新跳转页面,你需要判断 status 和 readyState 的值是 0 而不是判断 状态码 = 303.

例子二

使用 ajax 出错了,如何捕获异常状态码

  • success,error ,complete 都会返回 XMLHttpRequest获取 status 的值

  • statusCode 可以获取

     $.ajax({
            cache: false,
            url: url,
            data: params,
            type: method,
            contentType: contentType,
            statusCode: {
                404: function() {
                    console.log("404");
                }
            }
            ...
    

相关文章

  • AJAX浅谈

    在C#中使用 $.post()方法,方法里面一般会有三个参数,url、data、callback 形式如下: $....

  • 浅谈 Ajax

    最常用的技术,也最容易被忽略的地方。遇到一个问题:当使用 ajax 的时候请求后台,抛出异常。这时候就想到了用捕获...

  • 浅谈AJAX

    ajax大家应该都会很熟悉,我们在工作中或多或少的都会接触到ajax,今天我来谈一谈我对ajax的理解。 什么是a...

  • 浅谈AJAX

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页...

  • 浅谈 AJAX

    如何发请求? 用 form 可以发请求(get 或 post),但是会刷新页面或新开页面 用 a 可以发 get ...

  • 浅谈AJAX技术原理

    一、什么是ajax? AJAX(AsynchronousJavaScriptandXML):异步的JavaScri...

  • 浅谈JQuery中的Ajax

    此篇文章旨在记录一些不常使用的便捷功能: JQ版的Ajax传值写法 而在新版的写法中,已经可以简化到不用写这么多参...

  • 2020-07-02

    浅谈 浅谈模块设计宏内核 浅谈接口设计Flags 浅谈稳定性设计重试 浅谈人员业务结构设计矩阵式 浅谈接口设计 |...

  • AJAX

    主要内容: ajax 是什么、原生ajax 写法和jQuery ajax写法。 AJAX 是什么 ajax,即As...

  • JavaScript进阶知识点--AJAX及JSON

    AJAX 关于 AJAX 什么是 AJAX AJAX 的全称是 Asynchronous JavaScript a...

网友评论

      本文标题:浅谈 Ajax

      本文链接:https://www.haomeiwen.com/subject/laazqftx.html