From 1777110958f76ee4be5760e36c96702223385918 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Tue, 15 Feb 2011 01:12:45 -0500 Subject: split up services into individual files - split up services into files under src/service - split up specs into files under test/service - rewrite all specs so that they don't depend on one global forEach - get rid of obsolete code and tests in ng:switch - rename mock $log spec from "$log" to "$log mock" --- src/service/xhr.js | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/service/xhr.js (limited to 'src/service/xhr.js') diff --git a/src/service/xhr.js b/src/service/xhr.js new file mode 100644 index 00000000..2f003398 --- /dev/null +++ b/src/service/xhr.js @@ -0,0 +1,99 @@ +/** + * @workInProgress + * @ngdoc service + * @name angular.service.$xhr + * @function + * @requires $browser + * @requires $xhr.error + * @requires $log + * + * @description + * Generates an XHR request. The $xhr service adds error handling then delegates all requests to + * {@link angular.service.$browser $browser.xhr()}. + * + * @param {string} method HTTP method to use. Valid values are: `GET`, `POST`, `PUT`, `DELETE`, and + * `JSON`. `JSON` is a special case which causes a + * [JSONP](http://en.wikipedia.org/wiki/JSON#JSONP) cross domain request using script tag + * insertion. + * @param {string} url Relative or absolute URL specifying the destination of the request. For + * `JSON` requests, `url` should include `JSON_CALLBACK` string to be replaced with a name of an + * angular generated callback function. + * @param {(string|Object)=} post Request content as either a string or an object to be stringified + * as JSON before sent to the server. + * @param {function(number, (string|Object))} callback A function to be called when the response is + * received. The callback will be called with: + * + * - {number} code [HTTP status code](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes) of + * the response. This will currently always be 200, since all non-200 responses are routed to + * {@link angular.service.$xhr.error} service. + * - {string|Object} response Response object as string or an Object if the response was in JSON + * format. + * + * @example + + + +
+ +
+ + + sample + buzz +
code={{code}}
+
response={{response}}
+
+
+
+ */ +angularServiceInject('$xhr', function($browser, $error, $log){ + var self = this; + return function(method, url, post, callback){ + if (isFunction(post)) { + callback = post; + post = _null; + } + if (post && isObject(post)) { + post = toJson(post); + } + $browser.xhr(method, url, post, function(code, response){ + try { + if (isString(response) && /^\s*[\[\{]/.exec(response) && /[\}\]]\s*$/.exec(response)) { + response = fromJson(response, true); + } + if (code == 200) { + callback(code, response); + } else { + $error( + {method: method, url:url, data:post, callback:callback}, + {status: code, body:response}); + } + } catch (e) { + $log.error(e); + } finally { + self.$eval(); + } + }); + }; +}, ['$browser', '$xhr.error', '$log']); -- cgit v1.2.3