diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/service/http.js | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/service/http.js b/src/service/http.js index 17cc68ea..c2cbd161 100644 --- a/src/service/http.js +++ b/src/service/http.js @@ -1,4 +1,5 @@ 'use strict'; +'use strict'; /** * Parse headers into key value object @@ -360,6 +361,8 @@ function $HttpProvider() { * * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. + * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned to + * `?key1=value1&key2=value2` after the url. If the value is not a string, it will be JSONified. * - **data** – `{string|Object}` – Data to be sent as the request message data. * - **headers** – `{Object}` – Map of strings representing HTTP headers to send to the server. * - **transformRequest** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – @@ -638,7 +641,8 @@ function $HttpProvider() { var deferred = $q.defer(), promise = deferred.promise, cache, - cachedResp; + cachedResp, + url = buildUrl(config.url, config.params); $http.pendingRequests.push(config); promise.then(removePendingReq, removePendingReq); @@ -649,7 +653,7 @@ function $HttpProvider() { } if (cache) { - cachedResp = cache.get(config.url); + cachedResp = cache.get(url); if (cachedResp) { if (cachedResp.then) { // cached request has already been sent, but there is no response yet @@ -665,13 +669,13 @@ function $HttpProvider() { } } else { // put the promise for the non-transformed response into cache as a placeholder - cache.put(config.url, promise); + cache.put(url, promise); } } // if we won't have the response in cache, send the request to the backend if (!cachedResp) { - $httpBackend(config.method, config.url, reqData, done, reqHeaders, config.timeout); + $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout); } return promise; @@ -686,10 +690,10 @@ function $HttpProvider() { function done(status, response, headersString) { if (cache) { if (isSuccess(status)) { - cache.put(config.url, [status, response, parseHeaders(headersString)]); + cache.put(url, [status, response, parseHeaders(headersString)]); } else { // remove promise from the cache - cache.remove(config.url); + cache.remove(url); } } @@ -719,5 +723,21 @@ function $HttpProvider() { if (idx !== -1) $http.pendingRequests.splice(idx, 1); } } + + + function buildUrl(url, params) { + if (!params) return url; + var parts = []; + forEachSorted(params, function(value, key) { + if (value == null || value == undefined) return; + if (isObject(value)) { + value = toJson(value); + } + parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); + } + + }]; } |
