如何扩展jQuery的AJAX功能

时间:2014-03-27 17:31:55

标签: javascript jquery ajax extend

我已经玩过创建自己的jquery函数,这是通过

完成的
$.fn.extend({
    myFunc: function () {

    }
});

然而,在搜索网页和SO以获得答案后,​​我想问:

如何扩展$ .ajax()

运行

可以使用$.ajax的新实现
$.ajax({

}).done(function (e) {

}).fail(function (e) {

});

我想要做的是添加.progress()以便我不必总是写

$.ajax({
    url: path,
    xhrFields: {
        onprogress: function (e) {
            if (e.lengthComputable) {
                console.log(e.loaded /e.total * 100 + '%');
            }
        }
    }
});

每次我想监控进度。 e.g。

$.ajax({
    url: '/somewhereorother',
    type: 'post',
    dataType: 'json'
}).progress(function (e) {
    updateProgressBar(e.percentage + '%');
}).done(function (e) {

}).fail(function (e) {

});

1 个答案:

答案 0 :(得分:1)

$.ajax是附加到$对象的函数。

因此,要扩展它,你必须在某处存储对它的引用,并在需要时调用它,如:

var ajax = $.ajax;
$.ajax = function()
{
     if (!arguments[0].success)
     arguments[0].success = function()
     {
          window.alert('done!');
     }

     ajax.apply(ajax, arguments);
}

这是一个概念(我不确定申请中的this范围 - 必须实际运行它);)此外,我还说它丑陋如地狱做事的方式。

如果您希望$.ajax功能与官方功能不同,我仍然将其分开。通过$.my_ajax或通过单独的命名空间(请查看http://api.jquery.com/jquery.sub/