RestHandler.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // wrapped by build app
  2. define("dojox/wire/ml/RestHandler", ["dijit","dojo","dojox","dojo/require!dojox/wire/_base,dojox/wire/ml/util"], function(dijit,dojo,dojox){
  3. dojo.provide("dojox.wire.ml.RestHandler");
  4. dojo.require("dojox.wire._base");
  5. dojo.require("dojox.wire.ml.util");
  6. dojo.declare("dojox.wire.ml.RestHandler", null, {
  7. // summary:
  8. // A REST service handler
  9. // description:
  10. // This class serves as a base REST service.
  11. // Sub-classes may override _getContent() and _getResult() to handle
  12. // specific content types.
  13. contentType: "text/plain",
  14. handleAs: "text",
  15. bind: function(method, parameters, deferred, url){
  16. // summary:
  17. // Call a service method with parameters.
  18. // description:
  19. // A service is called with a URL generated by _getUrl() and
  20. // an HTTP method specified with 'method'.
  21. // For "POST" and "PUT", a content is generated by _getContent().
  22. // When data is loaded, _getResult() is used to pass the result to
  23. // Deferred.callback().
  24. // method:
  25. // A method name
  26. // parameters:
  27. // An array of parameters
  28. // deferred:
  29. // 'Deferred'
  30. // url:
  31. // A URL for the method
  32. method = method.toUpperCase();
  33. var self = this;
  34. var args = {
  35. url: this._getUrl(method, parameters, url),
  36. contentType: this.contentType,
  37. handleAs: this.handleAs,
  38. headers: this.headers,
  39. preventCache: this.preventCache
  40. };
  41. var d = null;
  42. if(method == "POST"){
  43. args.postData = this._getContent(method, parameters);
  44. d = dojo.rawXhrPost(args);
  45. }else if(method == "PUT"){
  46. args.putData = this._getContent(method, parameters);
  47. d = dojo.rawXhrPut(args);
  48. }else if(method == "DELETE"){
  49. d = dojo.xhrDelete(args);
  50. }else{ // "GET"
  51. d = dojo.xhrGet(args);
  52. }
  53. d.addCallbacks(function(result){
  54. deferred.callback(self._getResult(result));
  55. }, function(error){
  56. deferred.errback(error);
  57. });
  58. },
  59. _getUrl: function(/*String*/method, /*Array*/parameters, /*String*/url){
  60. // summary:
  61. // Generate a URL
  62. // description:
  63. // If 'method' is "GET" or "DELETE", a query string is generated
  64. // from a query object specified to the first parameter in
  65. // 'parameters' and appended to 'url'.
  66. // If 'url' contains variable seguments ("{parameter_name}"),
  67. // they are replaced with corresponding parameter values, instead.
  68. // method:
  69. // A method name
  70. // parameters:
  71. // An array of parameters
  72. // url:
  73. // A base URL
  74. // returns:
  75. // A URL
  76. var query;
  77. if(method == "GET" || method == "DELETE"){
  78. if(parameters.length > 0){
  79. query = parameters[0];
  80. }
  81. }else{ // "POST" || "PUT"
  82. if(parameters.length > 1){
  83. query = parameters[1];
  84. }
  85. }
  86. if(query){
  87. var queryString = "";
  88. for(var name in query){
  89. var value = query[name];
  90. if(value){
  91. value = encodeURIComponent(value);
  92. var variable = "{" + name + "}";
  93. var index = url.indexOf(variable);
  94. if(index >= 0){ // encode in path
  95. url = url.substring(0, index) + value + url.substring(index + variable.length);
  96. }else{ // encode as query string
  97. if(queryString){
  98. queryString += "&";
  99. }
  100. queryString += (name + "=" + value);
  101. }
  102. }
  103. }
  104. if(queryString){
  105. url += "?" + queryString;
  106. }
  107. }
  108. return url; //String
  109. },
  110. _getContent: function(/*String*/method, /*Array*/parameters){
  111. // summary:
  112. // Generate a request content
  113. // description:
  114. // If 'method' is "POST" or "PUT", the first parameter in
  115. // 'parameters' is returned.
  116. // method:
  117. // A method name
  118. // parameters:
  119. // An array of parameters
  120. // returns:
  121. // A request content
  122. if(method == "POST" || method == "PUT"){
  123. return (parameters ? parameters[0] : null); //anything
  124. }else{
  125. return null; //null
  126. }
  127. },
  128. _getResult: function(/*anything*/data){
  129. // summary:
  130. // Extract a result
  131. // description:
  132. // A response data is returned as is.
  133. // data:
  134. // A response data returned by a service
  135. // returns:
  136. // A result object
  137. return data; //anything
  138. }
  139. });
  140. });