2011-12-16 27 views
12

有沒有辦法在$.get()中設置超時時間?超時jQuery.get()

,因爲我想我的腳本給予警告,加載服用一段時間(也許是因爲繁忙的服務器或其他) 似乎無法在別處找到它..

+0

你的意思是你想在某個延遲後觸發一個函數,或者你想在某個延遲後取消`$ .get`請求嗎?如果它只是觸發一個函數,你可以使用`setTimeout`。 – zzzzBov 2011-12-16 14:18:20

回答

23

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

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

另外,如下面的評論說,你可以使用.ajaxSetup(...)申請全球超時:

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

如果您想全局執行此操作,請執行以下操作:$ .ajaxSetup({timeout:1000}); – epignosisx 2011-12-16 14:19:43

+0

@epignosisx也是如此。我會將其添加到答案中。^_^ – Neal 2011-12-16 14:20:13

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

使用ajaxSetup

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

//your get request here 
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調用,將10秒後,除非Ajax請求已完成顯示之前啓動超時。