在jQuery .load()回调上设置超时

时间:2015-07-29 07:37:14

标签: javascript jquery

我正在使用处理程序加载图像以获取有效图像和无效图像:

$('<img/>')  
.attr('src',$scope.newAssetData.newAssetUrl)
.load(validImage)
.error(invalidImage);

我想在加载时设置超时。意思是,如果一个图像加载的时间超过t,那么就做一些事情(例如,转到invalidImage处理程序)。

任何想法怎么做?

谢谢你, 米拉

2 个答案:

答案 0 :(得分:1)

我认为您希望以这种方式使用超时,例如:

var delay = 1000, /* if image takes more than one second to load, call error handler */
    $img = $('<img/>').load(validImage)
        .error(invalidImage)
        .attr('src', $scope.newAssetData.newAssetUrl); /* set src after relevant events to hanlde older browsers cached src */
setTimeout(function () {
    if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
        $(this).off('load');
        invalidImage.call(this);
    }
}.bind($img[0]), delay);

答案 1 :(得分:0)

我不相信你可以直接在.load()设置超时。

但是,如果您想异步加载图像,那么您可以使用.ajax()编写请求, ie ,然后可以设置超时。

根据.load()&#34的文档,它有一个隐含的回调函数&#34;,所以你必须自己填充

例如:

$.ajax({
    url: [image src],
    timeout: [in milliseconds],
    type: "GET",
    success: function(response) {
        // I'm not sure what you'll be getting as your response
    },
    error: function(jqXHR, textStatus, errorThrown) {
    }
});

这里是full documentation for .ajax()