Add timeout for XHR requests #95

Merged
BehindTheMath merged 2 commits from enhancement/add-xhr-timeout into master 2018-01-07 23:56:12 -05:00
4 changed files with 12 additions and 1 deletions

View File

@@ -392,6 +392,10 @@ Useful to debug page layout differences.
When set to true, clicking on a link that point the current url trigger a full page reload.
##### `timeout` (Integer, default to 0)
The timeout in milliseconds for the XHR requests. Set to 0 to disable the timeout.
### Events
Pjax fires a number of events regardless of how its invoked.

View File

@@ -158,6 +158,7 @@ Pjax.prototype = {
trigger(document, "pjax:send", options);
// Do the request
options.requestOptions.timeout = this.options.timeout
this.doRequest(href, options.requestOptions, function(html) {
// Fail if unable to load HTML via AJAX
if (html === false) {

View File

@@ -23,6 +23,7 @@ module.exports = function(options){
this.options.scrollTo = (typeof this.options.scrollTo === 'undefined') ? 0 : this.options.scrollTo;
this.options.cacheBust = (typeof this.options.cacheBust === 'undefined') ? true : this.options.cacheBust
this.options.debug = this.options.debug || false
this.options.timeout = this.options.timeout || 0
// we cant replace body.outerHTML or head.outerHTML
// it create a bug where new body or new head are created in the dom
@@ -37,4 +38,4 @@ module.exports = function(options){
if (typeof options.analytics !== "function") {
options.analytics = function() {}
}
}
}

View File

@@ -15,12 +15,17 @@ module.exports = function(location, options, callback) {
}
}
request.ontimeout = function() {
callback(null, request)
}
// Add a timestamp as part of the query string if cache busting is enabled
if (this.options.cacheBust) {
location += (!/[?&]/.test(location) ? "?" : "&") + new Date().getTime()
}
request.open(requestMethod.toUpperCase(), location, true)
request.timeout = options.timeout
request.setRequestHeader("X-Requested-With", "XMLHttpRequest")
request.setRequestHeader("X-PJAX", "true")