Skip to content

Instantly share code, notes, and snippets.

@designermonkey
Forked from akre54/backbone.fetch.js
Created September 30, 2015 09:15
Show Gist options
  • Save designermonkey/b5b104ec080cda62bab1 to your computer and use it in GitHub Desktop.
Save designermonkey/b5b104ec080cda62bab1 to your computer and use it in GitHub Desktop.

Revisions

  1. @akre54 akre54 revised this gist Jun 23, 2015. 1 changed file with 16 additions and 1 deletion.
    17 changes: 16 additions & 1 deletion backbone.fetch.js
    Original file line number Diff line number Diff line change
    @@ -17,6 +17,17 @@ var stringifyGETParams = function(url, data) {
    return url;
    }

    var status = function(response) {
    if (response.status >= 200 && response.status < 300) {
    return response;
    }
    throw new Error(response.statusText);
    }

    var json = function(response) {
    return response.json()
    }

    Backbone.ajax = function(options) {
    if (options.type === 'GET' && typeof options.data === 'object') {
    options.url = stringifyGETParams(options.url, options.data);
    @@ -29,5 +40,9 @@ Backbone.ajax = function(options) {
    'Content-Type': 'application/json'
    }),
    body: options.data
    })).then(options.success, options.error);
    }))
    .then(status)
    .then(json)
    .then(options.success)
    .catch(options.error);
    };
  2. @akre54 akre54 created this gist Nov 24, 2014.
    33 changes: 33 additions & 0 deletions backbone.fetch.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    var defaults = function(obj, source) {
    for (var prop in source) {
    if (obj[prop] === undefined) obj[prop] = source[prop];
    }
    return obj;
    }

    var stringifyGETParams = function(url, data) {
    var query = '';
    for (var key in data) {
    if (data[key] == null) continue;
    query += '&'
    + encodeURIComponent(key) + '='
    + encodeURIComponent(data[key]);
    }
    if (query) url += (~url.indexOf('?') ? '&' : '?') + query.substring(1);
    return url;
    }

    Backbone.ajax = function(options) {
    if (options.type === 'GET' && typeof options.data === 'object') {
    options.url = stringifyGETParams(options.url, options.data);
    }

    return fetch(options.url, defaults(options, {
    method: options.type,
    headers: defaults(options.headers || {}, {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
    }),
    body: options.data
    })).then(options.success, options.error);
    };