首页 > 代码库 > 第一百七十四节,jQuery,Ajax进阶

第一百七十四节,jQuery,Ajax进阶

jQuery,Ajax进阶

 

学习要点:

  1.加载请求

  2.错误处理

  3.请求全局事件

  4.JSON 和 JSONP

  5.jqXHR 对象

 

在 Ajax 课程中,我们了解了最基本的异步处理方式。本章,我们将了解一下 Ajax 的 一些全局请求事件、跨域处理和其他一些问题。

 

一.加载请求

在 Ajax 异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长的问题。而超 过一定时间的请求,用户就会变得不再耐烦而关闭页面。而如果在请求期间能给用户一些提 示,比如:正在努力加载中...,那么相同的请求时间会让用户体验更加的好一些。

jQuery 提供了两个全局事件,.ajaxStart()和.ajaxStop()。这两个全局事件,只要用户触发 了 Ajax,请求开始时(未完成其他请求)激活.ajaxStart(),请求结束时(所有请求都结束了) 激活.ajaxStop()。

ajaxStart()方法,请求开始时(未完成其他请求)激活.ajaxStart(),在document上使用,参数是匿名函数,可以在函数里做请求时的提示和操作


ajaxStop()方法,请求结束时(所有请求都结束了)激活.ajaxStop(),在document上使用,参数是匿名函数,可以在函数里做请求结束的提示和操作

    //ajax请求
    $(‘form input[type=button]‘).click(function () {
        $.ajax({
            type: ‘POST‘,
            url: ‘http://www.test.php‘,
            data: $(‘form‘).serialize(),
            success: function (response, status, xhr) {
                $(‘#box‘).html(response);
            }
        });
    });

    //监测ajax请求
    $(document).ajaxStart(function () {  //未完成请求时
        $(‘span‘).show();  //显示正在请求,请稍等
    }).ajaxStop(function () {  //请求结束时
        $(‘span‘).hide();  //隐藏请求提示元素
    });

 

如果请求时间太长,可以设置超时

    //ajax请求
    $(‘form input[type=button]‘).click(function () {
        $.ajax({
            type: ‘POST‘,
            url: ‘http://www.test.php‘,
            data: $(‘form‘).serialize(),
            success: function (response, status, xhr) {
                $(‘#box‘).html(response);
            },
            timeout : 500  //如果请求时间太长,可以设置超时
        });
    });

    //监测ajax请求
    $(document).ajaxStart(function () {  //未完成请求时
        $(‘span‘).show();  //显示正在请求,请稍等
    }).ajaxStop(function () {  //请求结束时
        $(‘span‘).hide();  //隐藏请求提示元素
    });

 

如果某个 ajax 不想触发全局事件,可以设置取消

    //ajax请求
    $(‘form input[type=button]‘).click(function () {
        $.ajax({
            type: ‘POST‘,
            url: ‘http://www.test.php‘,
            data: $(‘form‘).serialize(),
            success: function (response, status, xhr) {
                $(‘#box‘).html(response);
            },
            global : false  //如果某个 ajax 不想触发全局事件,可以设置取消
        });
    });

    //监测ajax请求
    //global : false了就不会触发这两个事件了,这里就不起作用了
    $(document).ajaxStart(function () {  //未完成请求时
        $(‘span‘).show();  //显示正在请求,请稍等
    }).ajaxStop(function () {  //请求结束时
        $(‘span‘).hide();  //隐藏请求提示元素
    });

 

二.错误处理

Ajax 异步提交时,不可能所有情况都是成功完成的,也有因为代码异步文件错误、网 络错误导致提交失败的。这时,我们应该把错误报告出来,提醒用户重新提交或提示开发者 进行修补。

 在之前高层封装中是没有回调错误处理的,比如$.get()、$.post()和.load()。所以,早期 的方法通过全局.ajaxError()事件方法来返回错误信息。而在 jQuery1.5 之后,可以通过连缀 处理使用局部.error()方法即可。而对于$.ajax()方法,不但可以用这两种方法,还有自己的属 性方法 error : function () {}。

$.ajax()使用属性提示错误,error : function () {}。

 

第一百七十四节,jQuery,Ajax进阶