0

我想知道扩展此代码有多容易,以便在无法连接时显示错误,并且在连接时显示加载文本或加载图像。在 ajax 驱动的网站上,这似乎是相当标准的行为,但我还没有在网上找到太多有用的信息来说明如何实现它。

$(document).ready(function () {
var loadUrl = 'http://sheldonbrown.com/web_sample1.html';

    $("#close").click(function () {
        $("#country_slide").hide();
    });

    $("#country").click(function () {
        $("#country_slide").show();
        $("#country_slide").html(ajax_load).load(loadUrl);
    });

});
4

1 回答 1

1

根据应用程序的上下文,您可以订阅回调以触发某些全局AJAX 事件。比如说,每当 AJAX 调用开始时,或者每当 AJAX 调用抛出错误时。

$(document)
    .ajaxStart(function (e) {
        $('body').showMyAwesomeLoadingGIF();
    })
    .ajaxComplete(function (e) {
        $('body').hideMyAwesomeLoadingGIF();
    });

这将导致这两个回调函数在文档中进行的每个 AJAX 调用的适当生命周期事件期间触发。

如果出于某种原因,您希望某个 AJAX 调用触发您的全局 AJAX 事件处理程序,则可以指定该特定 AJAX 调用不是 global

$.ajax({
    global : false,
    // blah
})

更多关于全局 AJAX 事件处理的信息在这里

编辑

如果您想保持更精细的控制,可以$.ajaxSetup()使用 ,但由于 jQuery 本身不鼓励使用它,我认为您可能不得不制定自己的解决方案。

就个人而言,如果您希望重复执行某些操作,我会使用带有闭包的包装函数来设置我的自定义选项值。

var ajax = (function () {

    var defaults = { };
    return function (opts) {
        opts = $.extend({}, defaults, opts);

        // place what you want to happen when an AJAX call starts here

        return $.ajax(opts)
            // place corresponding events here
            .done(function (m) {
            })
            .fail(function (x,s,e) {
            })
            .complete(function (m) {
            });
    };

}());

// then use that in your code like how you'd use $.ajax():

ajax({
    url : 'http://my.domain.com/api/users',
    type : 'GET'
}).done(function (m) {
    console.log('Done GET users.');
});

// ... and you can be sure that it has default options and default event handlers,
//     while being able to add on to them if you wish.
于 2013-06-05T22:03:36.027 回答