/** * Network functions * * @author Pierre HUBERT */ ComunicWeb.common.network = { /** * @var {object} Cache container */ cache: {}, /** * Make a GET request * * @param {String} url Destination URL * @param {Boolean} cacheResponse Specify if data can be cached or not (optimize network) * @param {function} GETnextAction What to do next * @return {Boolean} False if it fails */ getRequest: function(url, cacheResponse, GETnextAction){ //First, check if it is required to cache the request if(cacheResponse){ //Prepare cache entry name var cacheEntryName = encodeURIComponent(url); //Check if entry exists if(this.cache[cacheEntryName]){ //Call next action with the url contained into the cache GETnextAction(this.cache[cacheEntryName]); //Quit function return true; } } //No cache entry where found or cache is disabled, continue var xhrRequest = new XMLHttpRequest(); xhrRequest.open("GET", url); xhrRequest.onreadystatechange = function(){ if(xhrRequest.readyState == 4){ //We check if it is an error if(xhrRequest.status != 200){ //It's an error, we will quit soon, but debug message before ComunicWeb.debug.logMessage("GET request failed on " + url + " Got response code " + xhrRequest.status); return false; } //Check if it is required to cache result if(cacheResponse){ ComunicWeb.common.network.cache[cacheEntryName] = xhrRequest.responseText; } ComunicWeb.debug.logMessage("GET request: " + url + " Success (" + xhrRequest.status + ")"); //Call next action GETnextAction(xhrRequest.responseText); } } //Perform request xhrRequest.send(null); }, /** * Empty network cache * * @return {Boolean} True for a success */ emptyCache: function(){ this.cache = {}; //Success return true; }, /** * Update the status of the network * * @param {Boolean} success True for a successful request, false else * @return {Boolean} True for a success */ setStatus: function(success){ //If the request is the success, hide error message if(success){ //Check if an error message was present on the screen if(byId("networkErrorMessage")){ //Hide it byId("networkErrorMessage").style.display = "none"; } } //If we encountered a network error, display an error message if(!success){ //Log state ComunicWeb.debug.logMessage("NETWORK ERROR : It's seems a network request has just echoed... Please check the network !"); //Check if error message exists or not if(!byId("networkErrorMessage")){ //Create error message container var networkErrorMessage = createElem("div", document.body); networkErrorMessage.id = "networkErrorMessage"; //Create a callout element within it var errorName = " "+" Network error"; var errorMessage = "It seems that there is a network error, and Comunic can't access to the Internet anymore... Please check your internet connexion..."; var errorCallout = ComunicWeb.common.messages.createCalloutElem(errorName, errorMessage, "danger"); networkErrorMessage.appendChild(errorCallout) } //Make sure the error message is visible on the screen byId("networkErrorMessage").style.display = "block"; } }, };