简体   繁体   中英

How can I detect if a jquery ajax request has been going on for more than 5 seconds

Is it possible to tell if a jquery ajax request has been going on for more than a certain length of time? I would like to prompt users of my site if the request has been going on for 10 seconds to reload and retry, but I cant find anything in the documentation to meet my request.

Try setting timeout property and get the error handler parameter. The possible values are

"timeout", "error", "abort", and "parsererror"

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​

So for all ajax requests in your site... you should do something like this...

$.ajaxSetup({
     beforeSend: function(jqXHR, settings){

          /* Generate a timer for the request */
          jqXHR.timer = setTimeout(function(){

               /* Ask the user to confirm */
               if(confirm(settings.url + ' is taking too long. Cancel request?')){
                   jqXHR.abort();
               }
          }, 10000);
     }
});

Set a timeout and then cancel it once it ajax call completes.

var timer = setTimeout(function() {
    alert('Too long!');
}, 10000);

$.getJSON(url, function() {
   clearTimeout(timer);
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM