penguin/AstroJS

Javascript framework for my blog

botanjs/src/System/Net/_this.js

raw ยท 3538 bytes

(function(){
	var ns                              = __namespace( "System.Net" );
	/** @type {System.Debug} */
	var debug                           = __import( "System.Debug" );
	/** @type {Dandelion.IDOMObject} */
	var IDOMObject                      = __import( "Dandelion.IDOMObject" );

	// Handles all http transfers
	var getData = function (uri, handler, failedHandler)
	{
		var request = new XMLHttpRequest();
		debug.Info("[Net] GET: " + uri);
		request.onreadystatechange = function()
		{
			/*
				0: request not initialized 
				1: server connection established
				2: request received 
				3: processing request 
				4: request finished and response is ready
			*/
			if(request.readyState == 2)
			{
				debug.Info("[Net] GET R2:" + uri);
			}
			else if (request.readyState == 4)
			{
				debug.Info("[Net] GET R4:" + uri);
				if (request.status == 200)
				{
					try
					{
						handler(request.responseText);
					}
					catch(e)
					{
						debug.Error(e);
						failedHandler(null);
					}
				}
				else
				{
					debug.Info("[Net] Status: " + request.status.toString());
					debug.Info(request.responseText);
					failedHandler && failedHandler(null);
				}
			}
		}
		request.open("GET", uri, true);
		request.send();
	};

	var postFile = function (uri, data, handlers)
	{
		var request = new XMLHttpRequest()
			, generalExchange = new IDOMObject( request )
			, uploadExchange = new IDOMObject( request.upload )
		;

		if ( uploadExchange ) {
			handlers.progress && uploadExchange.addEventListener("Progress", handlers.progress);
			handlers.failed && uploadExchange.addEventListener("Error", handlers.failed);
		}

		generalExchange.addEventListener("ReadyStateChange", function(e) {
			if ( 4 == this.readyState ) {
				handlers.complete && handlers.complete(request.responseText);
			}
		});

		request.open("POST", uri, true);
		// request.setRequestHeader("Content-Type", "multipart/form-data");
		request.send(data);
	};

	var postData = function (uri, data, handler, failedHandler)
	{
		var request = new XMLHttpRequest();
		// compile post string
		data = compilePostData(data);
		debug.Info("[Net] PostString: " + data);
		request.onreadystatechange = function()
		{
			/*
				0: request not initialized 
				1: server connection established
				2: request received 
				3: processing request 
				4: request finished and response is ready
			*/
			if(request.readyState == 2)
			{
				debug.Info("[Net] POST R2:" + uri);
			}
			else if (request.readyState == 4)
			{
				debug.Info("[Net] POST R4:" + uri);
				if (request.status == 200)
				{
					try
					{
						var obj = JSON.parse(request.responseText);
						obj.status ? handler(obj): failedHandler(obj);
					}
					catch(e)
					{
						debug.Error(e);
						failedHandler(null);
					}
				}
				else
				{
					debug.Info("[Net] Status: " + request.status.toString());
					debug.Info(request.responseText);
					failedHandler(null);
				}
			}
		};

		request.open( "POST", uri );
		request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		request.send( data );
	};

	var compilePostData = function (obj)
	{
		var postdata = "timestamp=" + new Date().getTime();
		for(var name in obj)
		{
			postdata += "&" + name + "=" + encodeURIComponent(obj[name]);
		}

		return postdata;
	};

	ns[ NS_EXPORT ]( EX_FUNC, "getData", getData );
	ns[ NS_EXPORT ]( EX_FUNC, "postData", postData );
	ns[ NS_EXPORT ]( EX_FUNC, "postFile", postFile );
	// ns[ NS_EXPORT ]( EX_FUNC, "compilePostData", compilePostData );
})();