neft
Version:
Universal Platform
55 lines (39 loc) • 1.63 kB
text/coffeescript
'use strict'
utils = require 'src/utils'
module.exports = (Networking) ->
Request: require('./request.coffee') Networking
Response: require('./response.coffee') Networking
init: (networking) ->
__location.change.connect (uri) ->
# send internal request
networking.createLocalRequest
method: Networking.Request.GET
type: Networking.Request.HTML_TYPE
uri: uri
setImmediate ->
__location.append '/'
sendRequest: (req, res, callback) ->
{Request} = Networking
xhr = new XMLHttpRequest
xhr.open req.method, req.uri, true
for name, val of req.headers
xhr.setRequestHeader name, val
xhr.setRequestHeader 'X-Expected-Type', req.type
if cookies = utils.tryFunction(JSON.stringify, null, [req.cookies], null)
xhr.setRequestHeader 'X-Cookies', cookies
xhr.onreadystatechange = ->
return if xhr.readyState isnt 4
response = xhr.responseText
if req.type is Request.JSON_TYPE
response = utils.tryFunction JSON.parse, null, [response], response
if cookies = xhr.getResponseHeader('X-Cookies')
cookies = utils.tryFunction JSON.parse, null, [cookies], null
callback
status: xhr.status
data: response
cookies: cookies
if utils.isObject(req.data)
data = utils.tryFunction JSON.stringify, null, [req.data], req.data
else
data = req.data
xhr.send data