Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

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;
                }
        }
);

}