在ajax之后,Safari / Webkit处理功能太早:完成

时间:2011-02-21 16:42:25

标签: jquery ajax safari webkit

我正在做一个ajax调用,它的工作正常。事情是,我需要图像的尺寸。我不能在html中声明这些维度,因为它们是动态调整大小的。现在,如果我在完成状态期间调用一个函数,为了获取这些维度,webkit浏览器输出0,而FF输出正确的维度。

$.ajax({
        url: event.path,
        cache: false,
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            handler(XMLHttpRequest.responseText);
        },
        success: function(data, textStatus, XMLHttpRequest) {
            handler(data);
        },
        complete: function() {
            textBoxWidth();
        }
    });

这是被调用的函数

function textBoxWidth() {
    $("#project .textBox").css("width", $("#project .imgBox:last img").width());
}

对此有何建议?我试过了

if (jQuery.browser.safari && document.readyState != 'complete')

但是一旦DOM准备就绪,文档状态根本没有变化..

感谢。

2 个答案:

答案 0 :(得分:2)

另一个例子,关于如何让jquery在加载时等待jQuery.active。

它是一个吐出1的变量,如果jquery仍在加载则为0,如果完成则为0。

$.ajax({
        url: path,
        cache: false,
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            handler(XMLHttpRequest.responseText);
        },
        success: function(data, textStatus, XMLHttpRequest) {
            handler(data);
        },
        complete: function() {
            if (jQuery.active !== 0) {
                setTimeout( arguments.callee, 100 );
                return;
            }
            //fancyFunction();
        }
    });

答案 1 :(得分:1)

好。经过一段时间的黑客攻击后,我尝试了以下的溶剂,这是有效的。

$.ajax({
        url: event.path,
        cache: false,
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            handler(XMLHttpRequest.responseText);
        },
        success: function(data, textStatus, XMLHttpRequest) {
            handler(data);
        },
        complete: function() {
            var imgCount = $("#project .content").find("img");
            if (imgCount.length > 0) {
                if ($("#project .content img:last").width() == 0) {
                    setTimeout( arguments.callee, 100 );
                    return;
                }
            //fancyFunction();
            }
        }
    });

所以我做了什么: 在我的目标div中寻找图像。 如果周围有图像,并且我最后一张图像的宽度等于零:重新检查宽度100毫秒后。 否则继续...