Backbone.js fetch with parameters Backbone.js fetch with parameters javascript javascript

Backbone.js fetch with parameters


changing:

collection.fetch({ data: { page: 1} });

to:

collection.fetch({ data: $.param({ page: 1}) });

So with out over doing it, this is called with your {data: {page:1}} object as options

Backbone.sync = function(method, model, options) {    var type = methodMap[method];    // Default JSON-request options.    var params = _.extend({      type:         type,      dataType:     'json',      processData:  false    }, options);    // Ensure that we have a URL.    if (!params.url) {      params.url = getUrl(model) || urlError();    }    // Ensure that we have the appropriate request data.    if (!params.data && model && (method == 'create' || method == 'update')) {      params.contentType = 'application/json';      params.data = JSON.stringify(model.toJSON());    }    // For older servers, emulate JSON by encoding the request into an HTML-form.    if (Backbone.emulateJSON) {      params.contentType = 'application/x-www-form-urlencoded';      params.processData = true;      params.data        = params.data ? {model : params.data} : {};    }    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`    // And an `X-HTTP-Method-Override` header.    if (Backbone.emulateHTTP) {      if (type === 'PUT' || type === 'DELETE') {        if (Backbone.emulateJSON) params.data._method = type;        params.type = 'POST';        params.beforeSend = function(xhr) {          xhr.setRequestHeader('X-HTTP-Method-Override', type);        };      }    }    // Make the request.    return $.ajax(params);};

So it sends the 'data' to jQuery.ajax which will do its best to append whatever params.data is to the URL.


You can also set processData to true:

collection.fetch({     data: { page: 1 },    processData: true});

Jquery will auto process data object into param string,

but in Backbone.sync function,Backbone turn the processData off because Backbone will use other method to process datain POST,UPDATE...

in Backbone source:

if (params.type !== 'GET' && !Backbone.emulateJSON) {    params.processData = false;}


Another example if you are using Titanium Alloy:

 collection.fetch({      data: {             where : JSON.stringify({                page: 1             })           }       });