diff --git a/src/htmx.js b/src/htmx.js index 3ae640d2..7a3fef2b 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1116,10 +1116,14 @@ var htmx = htmx || (function () { var encodedParameters = null; forEach(getExtensions(elt), function (extension) { if (encodedParameters == null) { - extension.encodeParameters(xhr, filteredParameters, elt); + encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt); } }); - return urlEncode(filteredParameters); + if (encodedParameters != null) { + return encodedParameters; + } else { + return urlEncode(filteredParameters); + } } function issueAjaxRequest(elt, verb, path, eventTarget) { diff --git a/test/extensions/json-enc.js b/test/extensions/json-enc.js new file mode 100644 index 00000000..8dc25a62 --- /dev/null +++ b/test/extensions/json-enc.js @@ -0,0 +1,143 @@ +// +describe("json-enc extension", function() { + beforeEach(function () { + this.server = makeServer(); + clearWorkArea(); + htmx.defineExtension('json-enc', { + encodeParameters : function(xhr, parameters, elt) { + xhr.requestHeaders['Content-Type'] = 'application/json'; + xhr.overrideMimeType('text/json'); + return (JSON.stringify(parameters)); + } + }); + }); + afterEach(function () { + this.server.restore(); + clearWorkArea(); + }); + + it('handles basic post properly', function () { + var jsonResponseBody = JSON.stringify({}); + this.server.respondWith("POST", "/test", jsonResponseBody); + var div = make("