AJAX精简技术?

Vig*_*ond 8 javascript ajax jquery

我的问题有点抽象.

我们都熟悉在发出AJAX请求时出现的AJAX预加载器/微调器.我的问题是你如何避免这些?

以可排序列表为例.当用户拖放项目以使用它们时,会进行AJAX调用以更新订单.

以前,我会弹出一个全屏AJAX微调器,以防止用户做任何事情,直到AJAX调用完成.

我的问题是,我将如何避免使用AJAX微调器并"简化"ajax请求,以确保用户在2秒内启动20个ajax请求,它们将按顺序执行?

我真的不需要代码示例,只需要接受或流行的技巧/想法.或者,如果我在这里完全偏离轨道.

谢谢

Jas*_*ing 7

更新

使用异步javascript库而不是这个来实现你想要的

老下面

到目前为止,在使用数组或队列方面确保它们一次加载和返回一个好的答案.我会像gmail一样消除旋转器,只在必要时才向用户发送消息.关于所有这些微调器交易,没有必要打扰用户.无论如何,他们看起来就像小机器人一样.这是我要做的一些代码.

自从我对此表示赞同之后,我将解释其功能.

  1. 如果发生错误,则停止队列
  2. 成功发生时继续排队
  3. 具有上下文成功/错误的事件处理程序

我写插件所以这是一个值得插件的想法吗?我不这么认为,但嘿,你永远不会知道.

var queue = [],
doRequest = function(params) {
    params.running = true;
    $.ajax({
        url: params.url,
        dataType: 'json',
        success: function(d) {
            params.success.call(params,d);
            queue.unshift(); // Quit counting your change and move along.
            if (queue.length > 0) {
                doRequest(queue[0]); // Hey buddy, your next.
            }
        },
        error: function(a,b,c) {
            params.error.call(params,a,b,c);
            alert('"oops"'); // Rick Perry
        }
    });
},
queueRequest = function(params) {
    queue.push(params); // Sir, you'll need to go to the BACK of the line.
    if (!queue[0].running) {
        doRequest(queue[0]);
    }
};

// so to use this little snippit, you just call "queueRequest" like so (over and over)
queueRequest({
    url: 'someajax.abc',
    success: function(d) {
        // let the user know their stuff was saved etc.
        // "this" will be the context of the "params"
    },
    error: function(a,b,c) {
        // let the user know something went wrong etc.
        // "this" will be the context of the "params"
    } 
});
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.


Jam*_*mes 6

您可以创建一个"ajax请求管理器",将ajax请求排队等待(并可能捆绑在一起).我有一个复杂的应用程序,有许多ajax可更新控件,我只在正在更新的控件上显示微调器.由于您的可拖动列表只更新服务器上的内容,因此您可以在没有微调器的情况下离开.