使用jQuery.get()超时

时间:2011-12-16 14:16:03

标签: jquery html ajax

有没有办法在$.get()中设置超时时间?

因为我希望我的脚本发出警告说加载需要一些时间(可能是因为服务器繁忙或其他原因) 似乎无法在任何地方找到它。

6 个答案:

答案 0 :(得分:25)

只需使用$.ajax(...)

$.ajax({
   url: url,
   success: function(data){
        //...
   },
   timeout: 1000 //in milliseconds
});

同样如下面评论中所述,您可以使用.ajaxSetup(...)全局应用超时:

$.ajaxSetup({timeout:1000}); //in milliseconds

答案 1 :(得分:4)

$.get只是$.ajax的一个很好的简写,它有一个timeout选项,用于指定脚本在取消回调之前等待的时间。

您可以使用$.ajaxSetup({timeout: 9001})覆盖全局默认值,这样您就可以继续使用$.get

如果您只是想在不取消请求的情况下提醒用户,请使用$.ajax,设置超时,并取消complete回拨中的超时。

这是一些示例初学者代码,我还没有对它进行任何测试,它可能会变成一个有点工作的插件:

(function(){
  var t, delay;
  delay = 1000;
  $('.delay-message').ajaxStart(function () {
  var $this;
  $this = $(this);
  t = setTimeout(function () {
    $this.trigger('slowajax');
  }, delay);
  }).ajaxComplete(function () {
    if (t) {
      clearTimeout(t);
    }
  });
}());

$('.delay-message').on('slowajax', function () {
  $(this).show().delay(2000).fadeOut(1000);
});

答案 2 :(得分:3)

使用ajaxSetup

$.ajaxSetup({
timeout:2000 // in milliseconds 
});

//your get request here

答案 3 :(得分:2)

致电$.ajax并传递timeout选项。

答案 4 :(得分:1)

只需使用.ajax()即可;毕竟.get()只是一个包装器。你可以这样做:

function doAjax() {
    var $warning = $("#warning").hide(), // Always hide to start with
        warningTimeoutId = 0;

    warningTimeoutId = window.setTimeout(function () {
         $warning.show();
    }, 10000); // wait 10s before showing warning

    $.ajax({
        timeout: 30000, // 30s timeout
        complete: function () {
            // Prevent the warning message from appearing
            window.clearTimeout(warningTimeoutId);
        }
        ... // other config
    });
}

这里在Ajax调用之前启动超时,除非Ajax请求已经完成,否则将在10秒后显示。

答案 5 :(得分:0)

如果要在发生超时时轻松显示自定义错误消息(否则将不调用$ .get-completion回调),可以使用以下方法:

$.ajaxSetup({
    timeout: 1000,
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        if (textStatus == 'timeout') {
            // timeout occured
        } else {
            // other error occured (see errorThrown variable)
        }
    }
});