jquery ajax异步请求回调的详解

是指在写ajax异步请求时该如果写回调呢?写啥回调呢?错误时触发哪个回调呢?

常见的有:

$.post(url, {}, function(res){

}, 'json');
殊不知这种在出错的时候没有任何的处理。。。

通常我这样写:

$.ajax({
    url: '',
    data: {},
    dataType: 'json',
    type: 'POST',
    success: function(res){},
    error: function(){},
    complete: function(){}
});
你可能在说,代码可能有点多,其实我感觉只要业余清晰,代码多点也是能接受的,当然你可以用伟大的promise处理回调。。。在jquery里她转换成了deferred

一定要考虑的

缓存问题,这个通常发生在ie低版本,如ie7,一般使用时间缀解决
loading的状态,一定要让用户知道当前处理正在请求过程中
返回值出错,通常给予友好提示
服务器出错,其中包括404,500等状态
网络超时,一般有个时间限制
用户主动中断请求,如:abort
比如我的代码片断:

// 判断逻辑,如果成功才发请求

// 给出loading状态

// 发送请求,并所当前请求存放起来,以方便用户主动清除
XHR = $.ajax({
    url: '',
    data: {},
    dataType: 'json',
    type: 'POST',
    success: function(res){
        if(res && res.errcode === 0){
            // 成功
        } else {
            // 返回值不理想
        }
    },
    error: function(xhr, status){
        // status => timeout,parsererror,error,abort
        if(xhr && status !== 'abort'){
            // 如果不是用户主动中断
        }
    },
    complete: function(){
        // 关闭loading
    }
});
注:不管成功或者失败都会执行complete回调,且是在error或success后执行

回调触发的类型

error

错误回调,相当于fail
当后端出错,或者服务器状态码不为200,会触发error,第二参数为error

当返回值解析错误时触发error,第二个参数为parsererror

当响应超时时触发error,第二个参数为timeout

当用户主动中断请求时触发error,第二个参数为abort

以上是在jquery和zepto中测试

success

成功回调,相当于done
在jquery中当返回状态为200且内容正常解析后触发

在zepto中当返回值状态为200且内容不为空时触发,这是一个坑啊。。。

complete

完成回调,相当于always
不管成功还是失败,该事件总会执行,顺序在success和error之后

jquery版本

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>jquery版本</title>
</head>
<body>

    <h2>请点击并查看控制台</h2>
    <br>

    <button data-url="/api/testajax/success">成功</button>
    <button data-url="/api/testajax/404">404</button>
    <button data-url="/api/testajax/500">500</button>
    <button data-url="/api/testajax/parseError">解析json错误</button>
    <button data-url="/api/testajax/empty">返回值空</button>
    <button data-url="/api/testajax/timeout">超时</button>
   

    <script type="text/javascript" src="/static/jquery.js"></script>
    <script type="text/javascript">
        function send(url){
            $.ajax({
                url: url,
                data: {
                    r: new Date().getTime()
                },
                dataType: 'json',
                error: function(a,b){
                    console.log(a,b, 'error');
                },
                success: function(a){
                    console.log(a, 'success');
                },
                complete: function(a){
                    console.log(a, 'complete');
                },
                timeout: 3000
            });   
        }
        $('button').on('click', function(){
            send($(this).data('url'));
        });
    </script>
</body>
</html>

zepto版本

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>zepto版本</title>
</head>
<body>

    <h2>请点击并查看控制台</h2>
    <br>

    <button data-url="/api/testajax/success">成功</button>
    <button data-url="/api/testajax/404">404</button>
    <button data-url="/api/testajax/500">500</button>
    <button data-url="/api/testajax/parseError">解析json错误</button>
    <button data-url="/api/testajax/empty">返回值空</button>
    <button data-url="/api/testajax/timeout">超时</button>
   

    <script type="text/javascript" src="/static/zepto.js"></script>
    <script type="text/javascript">
        function send(url){
            $.ajax({
                url: url,
                data: {
                    r: new Date().getTime()
                },
                dataType: 'json',
                error: function(a,b){
                    console.log(a,b, 'error');
                },
                success: function(a){
                    console.log(a, 'success');
                },
                complete: function(a){
                    console.log(a, 'complete');
                },
                timeout: 3000
            });   
        }
        $('button').on('click', function(){
            send($(this).data('url'));
        });
    </script>
</body>
</html>

时间: 2024-08-01 15:13:36

jquery ajax异步请求回调的详解的相关文章

jquery ajax局部加载方法详解(实现代码)_jquery

在jquery中实现ajax加载的方法有很多种,不像以前的js的ajax只有那一种,下面我们介绍jquery ajax实现局部加载方法总结,有需要了解的朋友可参考. 例 $.ajax({ url: "hotelQuery!queryHotelByCity.action", type: "post", dataType: "html", data: "queryHotel.city="+cityobj.value+"&

jQuery Ajax实例各种使用方法详解

 jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 这是一个简单的 GET 请求功能以取代复杂 $.ajax .请求成功时可调用回调函数.如果需要在出错时执行函数,请使用 $.ajax. 示例 请求 test.php 网页,忽略返回值:  代码如下 复制代码 $.get("test.php"); 例子 1 请求 test.php 网页,传送2个参数,忽略返回值:  代码如下 复制代码 $.get("test.php&qu

jQuery ajax的post()使用方法详解

首先认识要jQuery.post(url, [data], [callback], [type]) 对参数进行说明: url:发送请求地址. data:待发送 Key/value 参数. callback:发送成功时回调函数. type:返回内容格式,xml, html, script, json, text, _default. 说明: 通过远程 HTTP POST 请求载入信息. 这是一个简单的 POST 请求功能以取代复杂 $.ajax .请求成功时可调用回调函数.如果需要在出错时执行函数

jquery ajax异步请求 接收返回json数据

例子  代码如下 复制代码 $('#send').click(function () {     $.ajax({         type : "GET",         url : "a.php",         dataType : "jsonp",         success : function (data) {             $.each(data.items, function (i, item) {       

基于jquery ajax 用户无刷新登录详解介绍

Ajax框架就是提供模块化实现Ajax功能的集合,Ajax框架可以是各种语言实现的(比如SAJAX有各种语言的实现),Ajax只是jquery中的一部分, 实例1  代码如下 复制代码 $.ajax({ type:'post',//可选get url:'action.php',//这里是接收数据的PHP程序 data:'data='dsa',//传给PHP的数据,多个参数用&连接 dataType:'text',//服务器返回的数据类型 可选XML ,Json jsonp script html

浅谈Jquery中Ajax异步请求中的async参数的作用_jquery

之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync{ var temp; $.ajax({ async: false, type : "GET", url : 'tet.php', complete: functi

jQuery Ajax 异步加载显示等待效果代码分享_jquery

AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它并非一种新的技术,而是以下几种原有技术的结合体. 1) 使用CSS和XHTML来表示. 2) 使用DOM模型来交互和动态显示. 3) 使用XMLHttpRequest来和服务器进行异步通信. 4) 使用javascript来绑定和调用. 通过AJAX异步技术,可以在客户端脚本与web服务器交互数据的过程中使用XMLHttpRequest对象来完成HTTP请求(Reques

Ajax异步请求JSon数据(图文详解)_AJAX相关

上一篇讲了Ajax请求数据text类型,text和html都是处理比较简答的数据,而在编程过程中使用Ajax调用数据的时候,难免要进行逻辑的处理,接受的数据也变的复杂比如数组类型的数据,这时候就需要使用JSON数据类型进行处理,今天就说说,JSON数据请求过程中的一些细节: 友情提醒本文所需工具和原料如下: wamp或lamp环境.jquery.js.编辑器 具体方法/步骤请看下面: 1.创建基本的文件结构json_ajax.html和json_ajax.php,下载jquery.js,如图:

Ajax异步请求JSon数据(图文详解)

上一篇讲了Ajax请求数据text类型,text和html都是处理比较简答的数据,而在编程过程中使用Ajax调用数据的时候,难免要进行逻辑的处理,接受的数据也变的复杂比如数组类型的数据,这时候就需要使用JSON数据类型进行处理,今天就说说,JSON数据请求过程中的一些细节: 脚本之家友情提醒本文所需工具和原料如下: wamp或lamp环境.jquery.js.编辑器 具体方法/步骤请看下面: 1.创建基本的文件结构json_ajax.html和json_ajax.php,下载jquery.js,