Подтвердить что ты не робот

Выбирать коллекцию с помощью запроса POST?

Мне удалось работать с REST API до fetch() данных, где URL-адреса содержат минимальные параметры (и используют GET).

Как получить сбор через запрос POST?

4b9b3361

Ответ 1

Также обратите внимание, что выборка поддерживает параметры Jquery.ajax, поэтому вы можете легко установить type = post в вызове.

Messages.fetch({data: {api_key: 'secretkey'}, type: 'POST'});

Дополнительные параметры: http://api.jquery.com/jQuery.ajax/

Ответ 2

Вам может потребоваться расширить объект Collection, чтобы установить собственное соглашение для извлечения. При этом вы, скорее всего, предоставите свою собственную функцию выборки. Что-то вроде:

fetch : function(options) {
  options || (options = {});
  var model = this;
  var success = function(resp) {
    if (!model.set(model.parse(resp), options)) return false;
    if (options.success) options.success(model, resp);
  };
  var error = wrapError(options.error, model, options);
  (this.sync || Backbone.sync)('create', this, success, error);
  return this;
}

где он использует 'create' вместо 'read'. На первом румянце это то, что я бы поставил первым, хотя может быть более элегантный способ сделать это.

Недостатком этого подхода является то, что у вас есть основной код в вашем приложении, и если изменения в каркасе могут возникнуть, вы можете столкнуться с проблемами. Вам было бы целесообразно разделить это изменение на отдельный слой, чтобы упростить его обновление с помощью новых выпусков фреймов.

Ответ 3

Backbone.sync - это функция, используемая для взаимодействия с сервером через ваши модели. Вы можете предоставить свою собственную реализацию, которая выдает запрос POST для метода "read" вместо GET. См. http://documentcloud.github.com/backbone/#Sync

Ответ 4

try {
    // THIS for POST+JSON
    options.contentType = 'application/json';
    options.type = 'POST';
    options.data = JSON.stringify(options.data);

    // OR THIS for GET+URL-encoded
    //options.data = $.param(_.clone(options.data));

    console.log('.fetch options = ', options);
    collection.fetch(options);
} catch (excp) {
    alert(excp);
}