Last active
August 29, 2015 14:13
-
-
Save volkovasystems/2c5635d6a17e59e76fc8 to your computer and use it in GitHub Desktop.
Basic JSON XMLHttpRequest implementation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var jsonHttp = function jsonHttp( ){ | |
var xmlHttpEngine = { | |
"xmlHttp": new XMLHttpRequest( ) | |
}; | |
var requestSet = { | |
"querySet": { }, | |
"parameterSet": { }, | |
"headerSet": { | |
"Content-Type": "application/json;charset=UTF-8" | |
}, | |
"URL": "/", | |
"method": "HEAD" | |
}; | |
var include = function include( ){ | |
}; | |
var define = function define( ){ | |
}; | |
var setURL = function setURL( URL ){ | |
requestSet.URL = URL; | |
return requestEngine; | |
}; | |
var setMethod = function setMethod( method ){ | |
requestSet.method = method; | |
return requestEngine; | |
}; | |
var setHeader = function setHeader( headerSet ){ | |
for( var header in headerSet ){ | |
requestSet.headerSet[ header ] = headerSet[ header ]; | |
} | |
requestSet.headerSet = Object.freeze( requestSet.headerSet ); | |
return requestEngine; | |
}; | |
var setQuery = function setQuery( querySet ){ | |
for( var query in querySet ){ | |
requestSet.querySet[ query ] = querySet[ query ]; | |
} | |
requestSet.querySet = Object.freeze( requestSet.querySet ); | |
return requestEngine; | |
}; | |
var setParameter = function setParameter( parameterSet ){ | |
for( var parameter in parameterSet ){ | |
requestSet.parameterSet[ parameter ] = parameterSet[ parameter ]; | |
} | |
requestSet.parameterSet = Object.freeze( requestSet.parameterSet ); | |
return requestEngine; | |
}; | |
var appendQuery = function appendQuery( URL ){ | |
var querySet = requestSet.querySet; | |
var queryString = ""; | |
for( var query in requestSet.querySet ){ | |
queryString += [ query, querySet[ query ] ].join( "=" ); | |
} | |
if( /\?/.test( URL ) && | |
/\&/.test( URL ) ) | |
{ | |
URL = [ URL, queryString ].join( "&" ); | |
}else if( /\?/.test( URL ) ){ | |
URL = [ URL, queryString ].join( "" ); | |
}else{ | |
URL = [ URL, queryString ].join( "?" ); | |
} | |
return URL; | |
}; | |
var addHeader = function addHeader( xmlHttp, headerSet ){ | |
var xmlHttp = xmlHttpEngine.xmlHttp; | |
for( var header in headerSet ){ | |
xmlHttp.setRequestHeader( header, headerSet[ header ] ); | |
} | |
}; | |
var get = function get( URL ){ | |
requestEngine.setURL( URL ); | |
requestEngine.setMethod( "GET" ); | |
return requestEngine; | |
}; | |
var post = function post( URL ){ | |
requestEngine.setURL( URL ); | |
requestEngine.setMethod( "POST" ); | |
return requestEngine; | |
}; | |
var send = function send( onResponseCallback ){ | |
var xmlHttp = xmlHttpEngine.xmlHttp; | |
xmlHttp.onreadystatechange = function onReadyStateChange( ){ | |
if( xmlHttp.readyState == 4 && | |
xmlHttp.status == 200 ) | |
{ | |
var result = JSON.parse( xmlHttp.responseText ); | |
onResponseCallback( null, result, xmlHttp ); | |
}else if( xmlHttp.readyState == 4 ){ | |
onResponseCallback( new Error( "request failed" ), null, xmlHttp ); | |
} | |
}; | |
var URL = appendQuery( requestSet.URL ); | |
xmlHttp.open( requestSet.method, URL, true ); | |
addHeader( xmlHttp, requestSet.headerSet ); | |
try{ | |
xmlHttp.send( JSON.stringify( requestSet.parameterSet ) ); | |
}catch( error ){ | |
onResponseCallback( error, null, xmlHttp ); | |
} | |
return requestEngine; | |
}; | |
var requestEngine = { }; | |
Object.defineProperty( requestEngine, "get", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": get | |
} ); | |
Object.defineProperty( requestEngine, "post", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": post | |
} ); | |
Object.defineProperty( requestEngine, "send", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": send | |
} ); | |
Object.defineProperty( requestEngine, "setHeader", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": setHeader | |
} ); | |
Object.defineProperty( requestEngine, "setParameter", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": setParameter | |
} ); | |
Object.defineProperty( requestEngine, "setQuery", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": setQuery | |
} ); | |
Object.defineProperty( requestEngine, "setMethod", | |
{ | |
"writable": false, | |
"enumerable": false, | |
"configurable": false, | |
"value": setMethod | |
} ); | |
return requestEngine; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment