Add the option to use FormData to encode the form elements (#153)
* Add the option to use FormData to encode the form elements If the form's enctype attribute is set to "multipart/form-data", use FormData to encode the form's elements.
This commit was merged in pull request #153.
This commit is contained in:
@@ -15,8 +15,7 @@ var formAction = function(el, event) {
|
||||
// Initialize requestOptions
|
||||
options.requestOptions = {
|
||||
requestUrl: el.getAttribute("action") || window.location.href,
|
||||
requestMethod: el.getAttribute("method") || "GET",
|
||||
requestParams: []
|
||||
requestMethod: el.getAttribute("method") || "GET"
|
||||
}
|
||||
|
||||
// create a testable virtual link of the form action
|
||||
@@ -31,6 +30,22 @@ var formAction = function(el, event) {
|
||||
|
||||
event.preventDefault()
|
||||
|
||||
if (el.enctype === "multipart/form-data") {
|
||||
options.requestOptions.formData = new FormData(el)
|
||||
}
|
||||
else {
|
||||
options.requestOptions.requestParams = parseFormElements(el)
|
||||
}
|
||||
|
||||
el.setAttribute(attrState, "submit")
|
||||
|
||||
options.triggerElement = el
|
||||
this.loadUrl(virtLinkElement.href, options)
|
||||
}
|
||||
|
||||
function parseFormElements(el) {
|
||||
var requestParams = []
|
||||
|
||||
for (var elementKey in el.elements) {
|
||||
if (Number.isNaN(Number(elementKey))) {
|
||||
continue;
|
||||
@@ -62,7 +77,7 @@ var formAction = function(el, event) {
|
||||
}
|
||||
|
||||
for (var j = 0; j < values.length; j++) {
|
||||
options.requestOptions.requestParams.push({
|
||||
requestParams.push({
|
||||
name: encodeURIComponent(element.name),
|
||||
value: encodeURIComponent(values[j])
|
||||
})
|
||||
@@ -71,10 +86,7 @@ var formAction = function(el, event) {
|
||||
}
|
||||
}
|
||||
|
||||
el.setAttribute(attrState, "submit")
|
||||
|
||||
options.triggerElement = el
|
||||
this.loadUrl(virtLinkElement.href, options)
|
||||
return requestParams
|
||||
}
|
||||
|
||||
function checkIfShouldAbort(virtLinkElement, options) {
|
||||
|
||||
@@ -6,6 +6,7 @@ module.exports = function(location, options, callback) {
|
||||
var requestOptions = options.requestOptions || {}
|
||||
var requestMethod = (requestOptions.requestMethod || "GET").toUpperCase()
|
||||
var requestParams = requestOptions.requestParams || null
|
||||
var formData = requestOptions.formData || null;
|
||||
var requestPayload = null
|
||||
var request = new XMLHttpRequest()
|
||||
var timeout = options.timeout || 0
|
||||
@@ -51,6 +52,9 @@ module.exports = function(location, options, callback) {
|
||||
break
|
||||
}
|
||||
}
|
||||
else if (formData) {
|
||||
requestPayload = formData
|
||||
}
|
||||
|
||||
// Add a timestamp as part of the query string if cache busting is enabled
|
||||
if (options.cacheBust) {
|
||||
|
||||
Reference in New Issue
Block a user