javascript - 如何扩展jQuery的AJAX功能

标签 javascript jquery ajax extend

我尝试过创建自己的 jquery 函数,这是通过

$.fn.extend({
    myFunc: function () {

    }
});

但是,在搜索网络并寻求答案后,我想问:

如何扩展 $.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 + '%');
            }
        }
    }
});

每次我想监控进度。例如

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

}).fail(function (e) {

});

最佳答案

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

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

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

     ajax.apply(ajax, arguments);
}

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

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

关于javascript - 如何扩展jQuery的AJAX功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695006/

相关文章:

javascript - 检查最后一个窗口历史记录是否来自某个 URL

javascript - 进行三重比较时会发生什么? (Javascript)

jquery - 如何使用 jQuery append()(以正确的顺序)执行大量的 DOM 插入?

jquery - 当 jquery 中的复选框未选中时,我试图从输入字段中删除 required

javascript - Ajax BeginForm - OnFailure 返回错误消息

Javascript 函数不会运行两次

javascript - 父组件中的 Reactjs 按钮在子组件中提交 Redux 表单

javascript - 使用 Aurelia 的 ref 属性引用元素的 View 模型

javascript - 将 JavaScript 对象转换为 HTML

javascript - 如何使用 laravel ajax 发布和获取评论而不重新加载页面?