2015-06-02 10 views
10

Ho un componente che utilizza un'istanza di <iron-ajax> per recuperare i dati dal back-end e vorrei utilizzare <iron-request> per inviare aggiornamenti come POST/CANCELLA richiestePolimero 1.0: più chiamate a send() metodo di richiesta di ferro

Tutto funziona perfettamente la prima volta. Tuttavia, se la richiesta viene richiamato ancora una volta, ottengo un errore:

Uncaught TypeError: Cannot read property 'then' of undefined

La mia definizione del modello si presenta così:

... 
<iron-ajax id="ajax" auto verbose 
    url="/cart-api/" 
    last-response="{{ajaxResponse}}" 
    handle-as="json"> 
</iron-ajax> 

<iron-request id="xhr"></iron-request> 
... 

Nel mio script componente io uso il metodo di <iron-request>send() per inviare un POST:

var me = this; 
this.$.xhr.send({ 
    url: "/cart-api", 
    method: "POST", 
    body: JSON.stringify(entry) 
}).then(function() { 
    me._refresh(); 
}, function() { 
    console.error("POST failed"); 
}); 

Il messaggio di errore indica che send è tornato undefined anziché un oggetto Promise valido.

Quindi la mia domanda è questa: è un elemento <iron-request> effettivamente riutilizzabile? Devo fare qualcosa per aggiornarlo o reinizializzarlo?

UPDATE

Grazie a @Zikes Ho aggiornato il mio codice come segue:

<iron-ajax id="ajaxGet" auto 
    url="/cart-api/" 
    last-response="{{ajaxResponse}}" 
    handle-as="json"> 
</iron-ajax> 

<iron-ajax id="ajaxPost" url="/cart-api" method="POST" on-response="_refresh"></iron-ajax> 

<iron-ajax id="ajaxDelete" method="DELETE" on-response="_refresh"></iron-ajax> 
insertEntry: function(entry) { 
    this.$.ajaxPost.body = JSON.stringify(entry); 
    this.$.ajaxPost.generateRequest(); 
}, 

_handleRemove: function(e) { 
    var entry = e.currentTarget.entry; 
    this.$.ajaxDelete.url = "/cart-api/" + entry.id; 
    this.$.ajaxDelete.generateRequest(); 
}, 

_refresh: function() { 
    this.$.ajaxGet.generateRequest(); 
}, 

risposta

6

Il componente <iron-ajax> genera un nuovo <iron-request> per ogni nuova richiesta fatta: https://github.com/PolymerElements/iron-ajax/blob/master/iron-ajax.html#L442

Se stai cercando la riusabilità (e altre belle funzionalità come il debo unce) probabilmente starai meglio usando il componente <iron-ajax>.

+0

Grazie ma può iron-ajax essere utilizzato per richieste non GET? –

+0

Sì! Ha un parametro 'method': https://github.com/PolymerElements/iron-ajax/blob/master/iron-ajax.html#L83 – Zikes

+0

Basta disattivare' auto', altrimenti si accenderà la richiesta immediatamente quando un modifiche di un singolo parametro (a meno che non sia nel mezzo di un antirimbalzo). La modifica di più parametri può comportare richieste multiple incomplete. – Zikes

Problemi correlati