13

It seems to be possible to set a timeout value when doing an Ajax request in plain javascript. see How to detect timeout on an AJAX (XmlHttpRequest) call in the browser?

It is also possible when using jQuery's ajax implementation, & other similar frameworks I assume. see Set timeout for ajax (jQuery)

Browsers seem to have rather vague specification regarding their default timeout. see Browser Timeouts

Hence one might "hey, I'm going to set a timeout to my ajax request so all the users will have the same timeout".

But then, the next question follow: would it actually override the browser's timeout in all cases?

When I say "all" cases, I mean for instance, if the browser timeout value is smaller than your ajax request timeout value.

I suspect it does not.

And I also suspect it is best practice to always have a timeout error handler to make sure that whatever happens you can display a relevant message that will save hours of work to your support team, & money to your company. see Determine if $.ajax error is a timeout

Thanks in advance

Community
  • 1
  • 1
Adriano
  • 19,463
  • 19
  • 103
  • 140
  • 2
    Based on this http://morgb.blogspot.de/2014/05/firefox-29-and-http-response-timeout.html I would guess "not at least on firefox. This answer claims there is no way to override. http://stackoverflow.com/questions/1192375/timeout-behavior-of-different-browsers – Marcus Jul 02 '14 at 16:12
  • Do you know the "complete", "success" and "error" settings of AJAX yet? I mean, why you gonna need a timeOut function when you have the "complete" setting that response when the request is end? – Fernando Torres Mar 21 '17 at 02:52
  • @FernandoUrban yes I do. The question is about setting a same timeout value regardless of the browser (browser's timeout). Not about acting according to timeout (whether you do it in "complete" or "error"). – Adriano Mar 21 '17 at 21:02

1 Answers1

6

It is an interesting question, I made some experiments in Chrome 59.0 and Firefox 54.0 using a 10min delay service as the backend.

After some test setting the timeout on the client to 10 minutes I had an error response with text status "error" after 300 seconds (5 minutes) in both browsers, so at least for these two browsers it is not possible to override the internal timeout value. I am assuming the same behavior for the remaining browsers in the market.

My test script: (similar results for vanilla JavaScript)

var st = new Date();  
  $.ajax({
      url: "https//mysitewith10minresponse.com/foobar",
      type: "GET",
      dataType: "json",
      timeout: 600000, 
      success: function(response) { console.log(response); },
      error: function(jqXHR, textStatus, errorThrown) {           
          st = (new Date() - st)/1000;
          alert("Text Status " + textStatus + ", diff: " + st + " seconds");          
      }
  });
cardeol
  • 2,218
  • 17
  • 25
  • 2
    Although it's a fundamental part of the answer, but I'm not clear on what you mean with: "300 seconds = 2 minutes" ?? could you please check that again? – JCM Jan 23 '19 at 10:22