123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- define([
- "../_base/declare", "../_base/Deferred", "../_base/json", "../_base/lang", "../_base/xhr",
- "./RpcService"
- ], function(declare, Deferred, json, lang, xhr, RpcService){
- // module:
- // dojo/rpc/JsonService
- return declare("dojo.rpc.JsonService", RpcService, {
- // summary:
- // TODOC
- 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 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 = xhr.post({
- 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 request for
- // params: array
- // The array of parameters for this request
- var req = { "params": params, "method": method, "id": ++this.lastSubmissionId };
- return json.toJson(req);
- },
- 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 receive from the server
- if(lang.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;
- }
- });
- });
|