]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojo/rpc/JsonService.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojo / rpc / JsonService.js
diff --git a/static/dojo-release-1.1.1/dojo/rpc/JsonService.js b/static/dojo-release-1.1.1/dojo/rpc/JsonService.js
new file mode 100644 (file)
index 0000000..d9775f6
--- /dev/null
@@ -0,0 +1,83 @@
+if(!dojo._hasResource["dojo.rpc.JsonService"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.rpc.JsonService"] = true;
+dojo.provide("dojo.rpc.JsonService");
+dojo.require("dojo.rpc.RpcService");
+
+dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, {
+               bustCache: false,
+               contentType: "application/json-rpc",
+               lastSubmissionId: 0,
+
+               callRemote: function(method, params){
+                       // summary:
+                       //              call an arbitrary remote method without requiring it to be
+                       //              predefined with SMD
+                       //      method: string
+                       //              the name of the remote method you want to call.
+                       //      params: array
+                       //              array of parameters to pass to method
+
+                       var deferred = new dojo.Deferred();
+                       this.bind(method, params, deferred);
+                       return deferred;
+               },
+
+               bind: function(method, parameters, deferredRequestHandler, url){
+                       //summary:
+                       //              JSON-RPC bind method. Takes remote method, parameters,
+                       //              deferred, and a url, calls createRequest to make a JSON-RPC
+                       //              envelope and passes that off with bind.
+                       //      method: string
+                       //              The name of the method we are calling
+                       //      parameters: array
+                       //              The parameters we are passing off to the method
+                       //      deferredRequestHandler: deferred
+                       //              The Deferred object for this particular request
+
+                       var def = dojo.rawXhrPost({
+                               url: url||this.serviceUrl,
+                               postData: this.createRequest(method, parameters),
+                               contentType: this.contentType,
+                               timeout: this.timeout, 
+                               handleAs: "json-comment-optional"
+                       });
+                       def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler));
+               },
+
+               createRequest: function(method, params){
+                       // summary:
+                       //      create a JSON-RPC envelope for the request
+                       //      method: string
+                       //              The name of the method we are creating the requst for
+                       //      params: array
+                       //              The array of parameters for this request;
+                       
+                       var req = { "params": params, "method": method, "id": ++this.lastSubmissionId };
+                       var data = dojo.toJson(req);
+                       return data;
+               },
+
+               parseResults: function(/*anything*/obj){
+                       //summary:
+                       //              parse the result envelope and pass the results back to
+                       //              the callback function
+                       //      obj: Object
+                       //              Object containing envelope of data we recieve from the server
+
+                       if(dojo.isObject(obj)){
+                               if("result" in obj){
+                                       return obj.result;
+                               }
+                               if("Result" in obj){
+                                       return obj.Result;
+                               }
+                               if("ResultSet" in obj){
+                                       return obj.ResultSet;
+                               }
+                       }
+                       return obj;
+               }
+       }
+);
+
+}