diff --git a/index.d.ts b/index.d.ts
index 0787688..96e5877 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -67,8 +67,9 @@ declare class Pjax {
* @param {string} requestText The raw text of the response. Same as request.responseText.
* @param {XMLHttpRequest} request The XHR object.
* @param {string} href The original URI used to initiate the request.
+ * @param options The Pjax options object used for the request
*/
- handleResponse(requestText: string, request: XMLHttpRequest, href: string): void;
+ handleResponse(requestText: string, request: XMLHttpRequest, href: string, options?: Pjax.IOptions): void;
/**
* Initiates the request by calling doRequest().
diff --git a/lib/proto/attach-form.js b/lib/proto/attach-form.js
index ee8ed31..0dbab38 100644
--- a/lib/proto/attach-form.js
+++ b/lib/proto/attach-form.js
@@ -40,8 +40,9 @@ var formAction = function(el, event) {
var tagName = element.tagName.toLowerCase()
// jscs:disable disallowImplicitTypeConversion
if (!!element.name && element.attributes !== undefined && tagName !== "button") {
- var type = element.attributes.type
// jscs:enable disallowImplicitTypeConversion
+ var type = element.attributes.type
+
if ((!type || type.value !== "checkbox" && type.value !== "radio") || element.checked) {
// Build array of values to submit
var values = []
diff --git a/lib/proto/handle-response.js b/lib/proto/handle-response.js
index 442da38..ab94197 100644
--- a/lib/proto/handle-response.js
+++ b/lib/proto/handle-response.js
@@ -2,13 +2,13 @@ var clone = require("../util/clone.js")
var newUid = require("../uniqueid.js")
var trigger = require("../events/trigger.js")
-module.exports = function(responseText, request, href) {
- var tempOptions = clone(this.options);
- tempOptions.request = request
+module.exports = function(responseText, request, href, options) {
+ options = clone(options || this.options)
+ options.request = request
// Fail if unable to load HTML via AJAX
if (responseText === false) {
- trigger(document, "pjax:complete pjax:error", tempOptions)
+ trigger(document, "pjax:complete pjax:error", options)
return
}
@@ -49,13 +49,13 @@ module.exports = function(responseText, request, href) {
}
this.state.href = href
- this.state.options = clone(this.options)
+ this.state.options = options
try {
this.loadContent(responseText, this.options)
}
catch (e) {
- trigger(document, "pjax:error", tempOptions)
+ trigger(document, "pjax:error", options)
if (!this.options.debug) {
if (console && console.error) {
diff --git a/lib/send-request.js b/lib/send-request.js
index 1c4a7f8..5f74d5f 100644
--- a/lib/send-request.js
+++ b/lib/send-request.js
@@ -13,21 +13,21 @@ module.exports = function(location, options, callback) {
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
- callback(request.responseText, request, location)
+ callback(request.responseText, request, location, options)
}
else if (request.status !== 0) {
- callback(null, request, location)
+ callback(null, request, location, options)
}
}
}
request.onerror = function(e) {
console.log(e)
- callback(null, request, location)
+ callback(null, request, location, options)
}
request.ontimeout = function() {
- callback(null, request, location)
+ callback(null, request, location, options)
}
// Prepare the request payload for forms, if available
diff --git a/tests/lib/proto/handle-response.js b/tests/lib/proto/handle-response.js
index 1e0bd37..b534273 100644
--- a/tests/lib/proto/handle-response.js
+++ b/tests/lib/proto/handle-response.js
@@ -37,7 +37,9 @@ tape("test events triggered when handleResponse(false) is called", function(t) {
tape("test when handleResponse() is called normally", function(t) {
var pjax = {
- options: {},
+ options: {
+ test: 1
+ },
loadContent: noop,
state: {}
}
@@ -55,7 +57,9 @@ tape("test when handleResponse() is called normally", function(t) {
scrollPos: [0, 0]
}, "window.history.state is set correctly")
t.equals(pjax.state.href, "href", "this.state.href is set correctly")
- t.same(pjax.state.options, pjax.options, "this.state.options is set correctly")
+ t.equals(Object.keys(pjax.state.options).length, 2, "this.state.options is set correctly")
+ t.same(pjax.state.options.request, request, "this.state.options is set correctly")
+ t.equals(pjax.state.options.test, 1, "this.state.options is set correctly")
t.end()
})