Skip to content

Instantly share code, notes, and snippets.

@bastman
Created November 19, 2012 11:34
Show Gist options
  • Save bastman/4110225 to your computer and use it in GitHub Desktop.
Save bastman/4110225 to your computer and use it in GitHub Desktop.
crowdparkRpc js api client
/**
* crowdparkRpc.callApi('AppJsonRpc', 'Foo.bar',[1,2,3], function(response){console.log("response=",response)})
* @desc rpc client namespace
* @type {Object}
*/
var crowdparkRpc = {
_initialized: false,
url: '',
loggerFunction: null,
baseParams: {},
setUrl : function(url) {
crowdparkRpc.url = url;
},
getUrl : function() {
return crowdparkRpc.url;
},
getBaseParams : function() {
return crowdparkRpc.baseParams;
},
setBaseParams : function(baseParams) {
crowdparkRpc.baseParams = baseParams;
},
log : function() {
try {
var loggerFunction = crowdparkRpc.loggerFunction;
if ((loggerFunction) && (loggerFunction.apply)) {
loggerFunction.apply(null, arguments);
}
}catch(e) {
//NOP
}
},
init : function() {
if(crowdparkRpc._initialized) {
return;
}
crowdparkRpc._initialized = true;
var gatewayRootUrl = applicationSettings.getGateway();
crowdparkRpc.setUrl(gatewayRootUrl);
var baseParams = {};
crowdparkRpc.setBaseParams(baseParams);
}
};
crowdparkRpc.invokeRpc = function(url, method, params, baseParams, callback)
{
crowdparkRpc.init();
var method = '' + method;
if(!params){
var params = [];
}
var rpc = {
method:method,
params:params
};
if(!baseParams) {
var baseParams = {};
}
for (var key in baseParams) {
rpc[key] = baseParams[key];
}
$.ajax({
url:url,
processData:false,
data:JSON.stringify(rpc),
type:'POST',
success:function(response)
{
var resp = response;
try
{
if(typeof(response) == 'string')
{
resp = JSON.parse(response);
}
if(typeof(resp) != 'object')
{
throw new Error("Invalid rpc response");
}
}
catch(e)
{
if(typeof(callback) == 'function')
{
callback({
result:null,
error:{
message:'Invalid rpc response!'
}
});
}
return;
}
if(typeof(callback) == 'function')
{
callback(resp);
}
},
error:function()
{
callback({
result:null,
error:{
message:'XHR ERROR'
}
});
}
});
};
crowdparkRpc.callApi = function(apiName, method, params, callback) {
crowdparkRpc.init();
var url = '' + crowdparkRpc.getUrl();
var apiPath = '' + apiName;
if(apiPath.toLowerCase) {
var apiPath = apiPath.toLowerCase();
}
var apiUrl = url + ''+apiPath + '/';
var method = '' + method;
var rpcMethod = method;
if(rpcMethod.indexOf(apiName) !=0) {
var rpcMethod = apiName + '.' + method;
}
var baseParams = crowdparkRpc.getBaseParams();
if(!baseParams) {
var baseParams = {};
}
if(!params) {
var params = [];
}
return crowdparkRpc.invokeRpc(
apiUrl, rpcMethod, params, baseParams, callback
);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment