jQuery

jQuery 知识量:7 - 32 - 105

6.3 其他工具><

观察员函数- 6.3.1 -

观察员函数指的就是在AJAX应用过程中,起监视监听作用的函数,它们可以在适当的时机进行某种干预或采取某种动作,用以增强AJAX应用的功能。所有观察员函数都是全局性的,因此不论在什么地方调用,它们都可以起作用。 

jQuery中常用的观察员函数有.ajaxStart()和.ajaxStop()。

  • .ajaxStart():当AJAX应用启动后,在请求已经开始开始,并且还没有进行任何数据传输时,就会触发.ajaxStart()的回调函数。

  • .ajaxStop():当最后一次请求终止时,就会执行通过.ajaxStop()注册的回调函数。

HTML代码如下:

<p>one</p>
<a href="#">start</a>

对应的JavaScript代码如下:

$(document).ready(function () {
    var showStatus = $('<p>working...</p>');
    $(document).ajaxStart(function () {
        showStatus.insertBefore('p').hide().slideDown(1000);
    }).ajaxStop(function () {
        showStatus.slideUp(1000);
    });
    $('a').click(function () {
        var setMessage = {content: $('p').text()};
        $.post("deal.php", setMessage, function (data) {
            $(data).insertAfter('a').hide().fadeIn(3000);
        });
        return false;
    });
});

这里使用PHP技术作为服务器端处理程序(deal.php):

$content = $_POST['content'];
if (!empty($content)) {
    sleep(3);
    echo "<p>hello $content!</p>";
}

以上代码中:

  • HTML部分设置了一个字段和一个链接,当链接被点击后,就会向服务器发送字段内容,服务器会返还数据,并在链接下方显示返还的内容。

  • JavaScript部分首先定义了一个待显示的字段内容“showStatus ”(AJAX状态显示器),当AJAX启动和运行过程中会显示该字段,AJAX请求结束后会隐藏该字段。

  • 随后设置观察员函数.ajaxStart()和.ajaxStop(),当AJAX启动时,将showStatus ”插入字段p的前部,先隐藏,后以滑下的动画效果显示出来。当AJAX结束时,将showStatus ”以滑上的动画效果隐藏起来。

  • 最后设置链接的单击事件,当链接被点击后,取得字段内容并作为参数传递给PHP处理程序,通过$.post()函数完成AJAX应用,返回的数据插入到链接的后面,以淡入的动画效果显示出来。

  • PHP部分就是一个接收和打印传递信息的程序,其中,通过sleep()函数让程序等待3秒后执行下一步,目的是模拟大数据处理时的等待情况,凸显AJAX状态显示器的作用。

上面是一个简单的AJAX状态显示器,主要的作用就是反馈当前服务器处理请求的状态情况。

错误处理- 6.3.2 -

当JavaScript出错时,默认是没有任何提示的,它只是默默的停止运行,jQuery也不例外。要想获得某种提示,就需要错误处理机制。

在jQuery中可以使用观察员函数.ajaxError()进行错误处理,使用方式跟.ajaxStart()和.ajaxStop()类似。也可以给.load()之外的Ajax方法连缀.fail()方法,并通过它添加相应的回调函数(用于处理具体错误)。

还是以观察员函数的例子为例,这里修改一下JavaScript部分:

$(document).ready(function () {
    var showStatus = $('<p>working...</p>');
    $(document).ajaxStart(function () {
        showStatus.insertBefore('p').hide().slideDown(1000);
    }).ajaxStop(function () {
        showStatus.slideUp(1000).queue(function (next) {
            $(this).remove();
            next();
        });
    });
    $('a').click(function () {
        var setMessage = {content: $('p').text()};
        $.post("dealError.php", setMessage, function (data) {
            $(data).insertAfter('a').hide().fadeIn(3000);
        }).fail(function () {
            $('<p>没有找到文件!</p>').insertAfter('a');
        });
        return false;
    });
});

以上代码中,首先修改$.post()函数的URL地址为一个不存在的错误地址,然后在$.post()函数后面连缀了一个.fail()函数,其回调函数设置为,当发生错误时,建立一个错误提示字段,并插入到链接后面。运行后如下所示:

55.JPG