javascript - Jquery Colorbox - 保留加载动画,直到单独的 ajax 内容准备好

标签 javascript jquery ajax colorbox

以下面的 JavaScript 函数为例:

function Admin_AccountDetails(UserID) {
    //$.colorbox({ title: "Loading, Please wait", opacity: "0.5", width: "500px", height: "200px" });
    $.ajax({
        url: "ajax.aspx?ajaxid=3&UserID=" + UserID,
        cache: false,
        success: function(response) {
            $.colorbox({ title: "Account Details (UserID: " + UserID + ")", opacity: "0.5", width: "700px", height: "250px", html: response });
        },
        error: function(xhr) {
            HandleBadAjaxResponse(xhr.status);
        }
    });
}

这个函数的想法是使用我们预先存在的函数加载ajax内容(注意使用HandleBadAjaxResponse()等)并在ColourBox div中显示结果内容。

这可行,但在返回 ajax 内容之前不会显示颜色框。

我们想要做的是在 ajax 请求不断变化的同时让 Colourbox 默认加载动画。

编辑:到目前为止的结果

首先我尝试了David建议的iframe方法:

$.colorbox({ iframe: true, title: "Loading, Please wait", opacity: "0.5", width: "500px", height: "200px", html: " ", fastIframe: false });

然而,这并没有按预期工作,是的,当 ajax 请求运行时,颜色框会立即出现,但因为我们使用了 iframehtml: " " 第一个框没有加载 gif - 当 ajax 调用完成并且框调整大小时,加载 gif 会出现一瞬间,我在 ajax 后端代码中注入(inject)了 2 秒的延迟来演示此问题:

http://www.heavencore.co.uk/filehub/Videos/StackOverflow/WithTwoSecondDelay.avi

接下来我尝试从第一个框中删除 iframe 和 html 标签,从某种意义上说,加载 Giff 在 ajax 请求的整个持续时间内都是可见的 - 但它也忽略了宽度和高度参数并绘制了大量的colorbox - 仅当 ajax 请求返回时才更正大小,再次,另一个视频显示了此内容:

$.colorbox({ title: "Loading, Please wait", opacity: "0.5", width: "500px", height: "200px" });

http://www.heavencore.co.uk/filehub/Videos/StackOverflow/AlmostCorrect.avi

如果我能让它像this一样工作但尺寸正确就完美了 - 有什么想法吗?

我唯一能想到的就是更改 ColorBox js 文件本身的默认宽度和高度:

(function ($, document, window) {
    var
    // Default settings object.
    // See http://jacklmoore.com/colorbox for details.
    defaults = {
        transition: "elastic",
        speed: 300,
        width: false,
        initialWidth: "500",
        innerWidth: false,
        maxWidth: false,
        height: false,
        initialHeight: "200",

最佳答案

如果我正确理解您的需求,以下 $.ajax 解决方案应该适合您。实际上,您所需要做的就是在开始通话之前设置颜色框。响应将确定您此时显示的内容,错误回调会自动处理您的逻辑。

function Admin_AccountDetails(UserID) {
    $.colorbox({iframe:true, title: "Loading, Please wait", width: "500px", height: "200px", html: " ", fastIframe:false });

    var url = "ajax.aspx?ajaxid=3&sid=" + Math.random();
    url = url + "&UserID=" + UserID;

    $.ajax({
        type: "GET",
        url: url,
        success: function(response) {
            $.colorbox({ title: "Account Details (UserID: " + UserID + ")", width: "500px", height: "200px", html: response });
        },
        error: function(xhr) {
            HandleBadAjaxResponse(xhr.status);
        }
    })
}

关于javascript - Jquery Colorbox - 保留加载动画,直到单独的 ajax 内容准备好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415515/

相关文章:

jquery - Tablesorter 输出到 CSV 不会触发

java - 单击任何按钮时如何显示正在加载的 gif

javascript - 如何找到 div 的最后一个后代?

javascript - 如何获取 overflow hidden 的div的高度?

javascript - 使用相同的图像从右侧滑入和滑出 div - JQuery

jquery - 如何让 li 项目落在鼠标指针处

ajax - Gmail 如何使 IE Back 在不刷新的情况下工作?

javascript - 在 Javascript 中缓存 Ajax 响应的可能技术有哪些?

javascript - 如果条件正确,为什么序列不起作用?

javascript - 如何在 angularjs 中将数据从工厂传递到我的 Controller ?