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('&'); +        } + +    }];  }  | 
