Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojo.rpc.JsonpService"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.rpc.JsonpService"] = true;
dojo.provide("dojo.rpc.JsonpService");
dojo.require("dojo.rpc.RpcService");
dojo.require("dojo.io.script");

dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, {
        // summary:
        //      Generic JSONP service.  Minimally extends RpcService to allow 
        //      easy definition of nearly any JSONP style service. Example
        //      SMD files exist in dojox.data

        constructor: function(args, requiredArgs){
                if(this.required) {
                        if(requiredArgs){
                                dojo.mixin(this.required, requiredArgs);
                        }

                        dojo.forEach(this.required, function(req){
                                if(req=="" || req==undefined){
                                        throw new Error("Required Service Argument not found: "+req); 
                                }
                        });
                }               
        },

        strictArgChecks: false,

        bind: function(method, parameters, deferredRequestHandler, url){
                //summary:
                //              JSONP 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.io.script.get({
                        url: url||this.serviceUrl,
                        callbackParamName: this.callbackParamName||"callback",
                        content: this.createRequest(parameters),
                        timeout: this.timeout,
                        handleAs: "json",       
                        preventCache: true
                });
                def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler));
        },

        createRequest: function(parameters){
                // summary:
                //      create a JSONP req
                //      params: array
                //              The array of parameters for this request;

                var params = (dojo.isArrayLike(parameters) && parameters.length==1) ?
                                parameters[0] : {};
                dojo.mixin(params,this.required);
                return params;
        }
});

}