auto-send Content-Type header if using JSON.stringify as serialize in m.request

This commit is contained in:
Leo Horie 2014-06-26 16:32:05 -04:00
parent 6bca818f34
commit f46b8c9238
3 changed files with 16 additions and 2 deletions

View file

@ -561,6 +561,9 @@ Mithril = m = new function app(window) {
else options.onerror({type: "error", target: xhr})
}
}
if (options.serialize == JSON.stringify && options.method != "GET") {
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
}
if (typeof options.config == "function") {
var maybeXhr = options.config(xhr, options)
if (maybeXhr !== undefined) xhr = maybeXhr
@ -592,8 +595,8 @@ Mithril = m = new function app(window) {
m.request = function(xhrOptions) {
if (xhrOptions.background !== true) m.startComputation()
var deferred = m.deferred()
var serialize = xhrOptions.serialize || JSON.stringify
var deserialize = xhrOptions.deserialize || JSON.parse
var serialize = xhrOptions.serialize = xhrOptions.serialize || JSON.stringify
var deserialize = xhrOptions.deserialize = xhrOptions.deserialize || JSON.parse
var extract = xhrOptions.extract || function(xhr) {
return xhr.responseText.length === 0 && deserialize === JSON.parse ? null : xhr.responseText
}

View file

@ -1211,6 +1211,13 @@ function testMithril(mock) {
m.endComputation()
return prop() === undefined && error() === "no error" && exception.message == "error occurred"
})
test(function() {
var error = m.prop("no error")
var prop = m.request({method: "POST", url: "test"}).then(null, error)
var xhr = mock.XMLHttpRequest.$instances.pop()
xhr.onreadystatechange()
return xhr.$headers["Content-Type"] == "application/json; charset=utf-8"
})
//m.deferred
test(function() {

View file

@ -85,6 +85,10 @@ mock.window = new function() {
}
window.XMLHttpRequest = new function() {
var request = function() {
this.$headers = {}
this.setRequestHeader = function(key, value) {
this.$headers[key] = value
}
this.open = function(method, url) {
this.method = method
this.url = url