Vraag Een verzameling ophalen met een POST-aanvraag?


Ik ben erin geslaagd om met REST API's te werken fetch() data waar de urls minimale parameters (en gebruik) bevatten GET).

Hoe zou men een verzameling via een kunnen ophalen? POST verzoek?


29
2018-06-21 16:33


oorsprong


antwoorden:


Merk ook op dat fetch de Jquery.ajax-parameters ondersteunt, zodat je gemakkelijk type = post in de oproep kunt instellen.

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

Voor meer parameters: http://api.jquery.com/jQuery.ajax/


63
2017-09-28 12:50



Mogelijk moet u het collectie-object uitbreiden om uw eigen conventie voor ophalen te installeren. Daarbij zou u waarschijnlijk uw eigen fetch-functie opgeven. Zoiets als:

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;
}

waar het een 'create' gebruikt in plaats van een 'read'. Op de eerste gezicht, dit is wat ik eerst zou proberen, hoewel er misschien een elegantere manier is om het te doen.

Het nadeel van deze aanpak is dat je in essentie een framework-code in je app hebt en dat als het framework verandert, je mogelijk problemen tegenkomt. Je zou er goed aan doen om deze verandering op te splitsen in een aparte laag om het gemakkelijk te updaten met nieuwe framework-releases.


2
2018-06-21 16:45



Backbone.sync is de functie die wordt gebruikt om via uw modellen met de server te communiceren. U kunt uw eigen implementatie opgeven die een POST-aanvraag afgeeft voor de 'lees'-methode in plaats van GET. Zien http://documentcloud.github.com/backbone/#Sync


2
2018-06-21 16:46



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);
}

1
2018-01-07 14:22