2016-11-23 4 views
1

Ich habe ein benutzerdefiniertes Element mit Eisen-Ajax. Ich weiß nicht, warum die Anfrage zweimal auftritt. Dies ist mein Code:Polymer-Komponente Eisen-Ajax machen zwei Anfragen

<template> 

    <div style="text-align: center" hidden="{{!cargando}}">cargando ... <br /> 
     <paper-spinner alt="cargando ..." active="[[cargando]]"></paper-spinner> 
    </div> 

    <ficha-folleto datos="[[ajaxResponse]]"></ficha-folleto> 

    <iron-ajax 
     auto 
     url="backend/api.php?operacion=folleto&idf=[[idf]]&len=[[len]]" 
     handle-as="json" 
     verbose=true 
     last-response={{ajaxResponse}} 
     loading="{{cargando}}"> </iron-ajax> 
</template> 

<script> 
    Polymer({ 
     is: "folleto-digital", 
     properties: { 
     } 
    }); 
</script> 

Der Anruf ist auf dieser Seite:

<link rel="import" href="bower_components/polymer/polymer.html"> 
<link rel="import" href="elements/folleto-digital/folleto-digital.html"> 
<!DOCTYPE html> 
<html> 
    <head> 
     <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> 
     <title>TODO supply a title</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
    <folleto-digital idf="" id="folleto"></folleto-digital> 
    <script src="js/funciones.js"></script> 
    <script> 
     var idf = getParameterByName("idf"); 
     var folleto = document.querySelector("#folleto"); 
     folleto.idf = idf; 

     var len = getParameterByName("len"); 
     folleto.len = len; 
    </script> 
</body> 
</html> 

Und ich anfordernden diese URL: folleto.html idf = 1 & len = es

Alles funktioniert gut, aber es gibt zwei Anfrage:

  1. api.php operacion = folleto & idf = & len =
  2. api.php operacion = folleto & idf = 1 & len = es
  3. ?

Die Dokumentation Polymer sagt über auto-param:

"Wenn das stimmt, wird automatisch ein Ajax-Request, wenn entweder uRL oder params changes"

Also ich denke, die Param am Anfang haben Wert = "" und dann nehmen Sie die Werte aus der Querystring und wegen dieser Anfrage zweimal.

Wie kann ich das beheben, um eine einzige Anfrage zu bearbeiten?

Danke!

Antwort

3

Wenn <iron-ajax>.auto wahr ist, generiert das Element automatisch die Anforderung, wenn eine nicht leere Zeichenfolge ist. Da der url einen nicht leeren Wert hat, selbst wenn idf und len leer sind, generiert der <iron-ajax> eine Anforderung, noch bevor Sie idf und len festgelegt haben.

Wenn Sie <iron-ajax> wollen nur die Anfrage zu senden, wenn idf und len gesetzt sind, müssen Sie würden auto entfernen, und fügen Sie einen komplexen Beobachter auf idf und len, der die Anforderung nur erzeugt, wenn beide Werte nicht leer sind.

// template 
<iron-ajax id="ajax" ...> 
Polymer({ 
    is: "folleto-digital", 

    properties: { 
    idf: String, 
    len: String 
    }, 

    observers: ['_sendRequest(idf, len)'], 

    _sendRequest: function(idf, len) { 
    if (idf && len) { 
     this.$.ajax.generateRequest(); 
    } 
    } 
}); 
+0

Perfect !! Vielen Dank! – Jaime

+0

@Jaime Kein Problem :) – tony19

Verwandte Themen