104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
![]() |
/*
|
||
|
Copyright (c) 2004-2006, The Dojo Foundation
|
||
|
All Rights Reserved.
|
||
|
|
||
|
Licensed under the Academic Free License version 2.1 or above OR the
|
||
|
modified BSD license. For more information on Dojo licensing, see:
|
||
|
|
||
|
http://dojotoolkit.org/community/licensing.shtml
|
||
|
*/
|
||
|
|
||
|
dojo.provide("dojo.rpc.JsonService");
|
||
|
dojo.require("dojo.rpc.RpcService");
|
||
|
dojo.require("dojo.io.*");
|
||
|
dojo.require("dojo.json");
|
||
|
dojo.require("dojo.lang");
|
||
|
|
||
|
dojo.rpc.JsonService = function(args){
|
||
|
// passing just the URL isn't terribly useful. It's expected that at
|
||
|
// various times folks will want to specify:
|
||
|
// - just the serviceUrl (for use w/ remoteCall())
|
||
|
// - the text of the SMD to evaluate
|
||
|
// - a raw SMD object
|
||
|
// - the SMD URL
|
||
|
if(args){
|
||
|
if(dojo.lang.isString(args)){
|
||
|
// we assume it's an SMD file to be processed, since this was the
|
||
|
// earlier function signature
|
||
|
|
||
|
// FIXME: also accept dojo.uri.Uri objects?
|
||
|
this.connect(args);
|
||
|
}else{
|
||
|
// otherwise we assume it's an arguments object with the following
|
||
|
// (optional) properties:
|
||
|
// - serviceUrl
|
||
|
// - strictArgChecks
|
||
|
// - smdUrl
|
||
|
// - smdStr
|
||
|
// - smdObj
|
||
|
if(args["smdUrl"]){
|
||
|
this.connect(args.smdUrl);
|
||
|
}
|
||
|
if(args["smdStr"]){
|
||
|
this.processSmd(dj_eval("("+args.smdStr+")"));
|
||
|
}
|
||
|
if(args["smdObj"]){
|
||
|
this.processSmd(args.smdObj);
|
||
|
}
|
||
|
if(args["serviceUrl"]){
|
||
|
this.serviceUrl = args.serviceUrl;
|
||
|
}
|
||
|
if(typeof args["strictArgChecks"] != "undefined"){
|
||
|
this.strictArgChecks = args.strictArgChecks;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dojo.inherits(dojo.rpc.JsonService, dojo.rpc.RpcService);
|
||
|
|
||
|
dojo.lang.extend(dojo.rpc.JsonService, {
|
||
|
|
||
|
bustCache: false,
|
||
|
|
||
|
contentType: "application/json-rpc",
|
||
|
|
||
|
lastSubmissionId: 0,
|
||
|
|
||
|
callRemote: function(method, params){
|
||
|
var deferred = new dojo.rpc.Deferred();
|
||
|
this.bind(method, params, deferred);
|
||
|
return deferred;
|
||
|
},
|
||
|
|
||
|
bind: function(method, parameters, deferredRequestHandler, url){
|
||
|
dojo.io.bind({
|
||
|
url: url||this.serviceUrl,
|
||
|
postContent: this.createRequest(method, parameters),
|
||
|
method: "POST",
|
||
|
contentType: this.contentType,
|
||
|
mimetype: "text/json",
|
||
|
load: this.resultCallback(deferredRequestHandler),
|
||
|
preventCache:this.bustCache
|
||
|
});
|
||
|
},
|
||
|
|
||
|
createRequest: function(method, params){
|
||
|
var req = { "params": params, "method": method, "id": ++this.lastSubmissionId };
|
||
|
var data = dojo.json.serialize(req);
|
||
|
dojo.debug("JsonService: JSON-RPC Request: " + data);
|
||
|
return data;
|
||
|
},
|
||
|
|
||
|
parseResults: function(obj){
|
||
|
if(!obj){ return; }
|
||
|
if(obj["Result"]||obj["result"]){
|
||
|
return obj["result"]||obj["Result"];
|
||
|
}else if(obj["ResultSet"]){
|
||
|
return obj["ResultSet"];
|
||
|
}else{
|
||
|
return obj;
|
||
|
}
|
||
|
}
|
||
|
});
|