Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>One way to handle this might be to extend the XmlHTTPRequest object with an explicit timeout method, then use that to determine if you're working in offline mode (that is, for browsers that don't support navigator.onLine). Here's how I implemented Ajax timeouts on one site (a site that uses the <a href="http://prototypejs.org/&quot;Prototype&quot;" rel="nofollow noreferrer">Prototype</a> library). After 10 seconds (10,000 milliseconds), it aborts the call and calls the onFailure method.</p> <pre><code>/** * Monitor AJAX requests for timeouts * Based on the script here: http://codejanitor.com/wp/2006/03/23/ajax-timeouts-with-prototype/ * * Usage: If an AJAX call takes more than the designated amount of time to return, we call the onFailure * method (if it exists), passing an error code to the function. * */ var xhr = { errorCode: 'timeout', callInProgress: function (xmlhttp) { switch (xmlhttp.readyState) { case 1: case 2: case 3: return true; // Case 4 and 0 default: return false; } } }; // Register global responders that will occur on all AJAX requests Ajax.Responders.register({ onCreate: function (request) { request.timeoutId = window.setTimeout(function () { // If we have hit the timeout and the AJAX request is active, abort it and let the user know if (xhr.callInProgress(request.transport)) { var parameters = request.options.parameters; request.transport.abort(); // Run the onFailure method if we set one up when creating the AJAX object if (request.options.onFailure) { request.options.onFailure(request.transport, xhr.errorCode, parameters); } } }, // 10 seconds 10000); }, onComplete: function (request) { // Clear the timeout, the request completed ok window.clearTimeout(request.timeoutId); } }); </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload