web-dev-qa-db-ja.com

POST request?

REST APIからfetch()データへのURLに最小限のパラメーターが含まれる(そしてGETを使用する)データを処理することができました。

どのようにしてPOSTリクエストを通じてコレクションを取得しますか?

29
mike

また、fetchはJquery.ajaxパラメータをサポートしているため、呼び出しでtype = postを簡単に設定できます。

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

その他のパラメーター: http://api.jquery.com/jQuery.ajax/

63
Arvid Janson

独自のフェッチ規則をインストールするには、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;
}

ここでは、「読み取り」の代わりに「作成」を使用します。最初の赤面では、これは私が最初に試すことですが、よりエレガントな方法があるかもしれません。

このアプローチの欠点は、本質的にアプリにフレームワークコードがあり、フレームワークが変更されると問題が発生する可能性があることです。この変更を別のレイヤーに区分化して、新しいフレームワークのリリースで簡単に更新できるようにすることをお勧めします。

2
Bill Eisenhauer

Backbone.syncは、モデルを介してサーバーと対話するために使用される関数です。 GETの代わりにPOST 'read'メソッドのリクエストを発行する独自の実装を提供できます。参照 http://documentcloud.github.com/backbone/#Sync

2
Rob Cowie
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);
}