Files
pjax/lib/send-request.js

72 lines
2.0 KiB
JavaScript
Raw Normal View History

2018-02-21 18:27:26 +00:00
var updateQueryString = require("./util/update-query-string");
module.exports = function(location, options, callback) {
options = options || {}
2018-03-01 10:19:35 +00:00
var queryString
2018-02-21 18:27:26 +00:00
var requestMethod = (options.requestMethod || "GET").toUpperCase()
var requestParams = options.requestParams || null
var requestPayload = null
2014-05-04 08:45:22 +02:00
var request = new XMLHttpRequest()
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
callback(request.responseText, request)
}
else {
callback(null, request)
}
}
}
request.onerror = function(e) {
console.log(e)
callback(null, request)
}
request.ontimeout = function() {
callback(null, request)
}
2018-02-21 18:27:26 +00:00
// Prepare the request payload for forms, if available
if (requestParams && requestParams.length) {
2018-03-01 10:19:35 +00:00
// Build query string
queryString = (requestParams.map(function(param) {return param.name + "=" + param.value})).join("&")
2018-02-21 18:27:26 +00:00
switch (requestMethod) {
case "GET":
// Reset query string to avoid an issue with repeat submissions where checkboxes that were
// previously checked are incorrectly preserved
location = location.split("?")[0]
2018-03-01 10:19:35 +00:00
// Append new query string
location += "?" + queryString
break
2018-02-21 18:27:26 +00:00
case "POST":
2018-03-01 10:19:35 +00:00
// Send query string as request payload
requestPayload = queryString
break
2018-02-21 18:27:26 +00:00
}
}
// Add a timestamp as part of the query string if cache busting is enabled
if (this.options.cacheBust) {
2018-02-21 18:27:26 +00:00
location = updateQueryString(location, "t", Date.now())
}
2018-02-21 18:27:26 +00:00
request.open(requestMethod, location, true)
request.timeout = options.timeout
2014-05-04 08:45:22 +02:00
request.setRequestHeader("X-Requested-With", "XMLHttpRequest")
request.setRequestHeader("X-PJAX", "true")
2018-02-21 18:27:26 +00:00
// Send the proper header information for POST forms
if (requestPayload && requestMethod === "POST") {
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
}
request.send(requestPayload)
2014-05-04 08:45:22 +02:00
return request
}