Loop attraverso JSON in EJS

Ho i codici EJS di seguito,

<script>
    var row =<%-JSON.stringify(data)%>
    console.log(row);
</script>
<% for(var i=0; i<JSON.stringify(data).length; i++) {%>
   <tr>
     <td>
       <%= JSON.stringify(data)[i].id%>
     </td>
   </tr>
<% } %>

output della riga è corretta, un array di 3 oggetti, ciascuno con proprietà id, nome, ecc.. posso manipolare la riga popuate la tabella in JS. Tuttavia, io sono wonderring se c’è un modo per consentire essere fatto nel modo sopra?

Quando eseguo il codice di cui sopra, JSON.stringify(dati).la lunghezza non è 3, ma piuttosto la lunghezza di tutta la stringa.

Un altra domanda è quando cerco di aggiungere

<% alert(‘t’); %> o <% finestra.alert(‘t’); %>, è per me ‘non definito’ errore…

Aiuta apprezzato.

Riguarda
Martello

  • All’interno del vostro ciclo for si può solo riferimento data poiché è stato manipolato sul server (per esempio, si desidera manipolare come un oggetto reale, non come una stringa). Per quanto riguarda la tua seconda domanda, alert e window sono specifiche del browser e non sono n nodi.
  • Grazie Barry. è possibile in EJS, ho definito di una funzione o di var in <script> e di riferimento in <% %>?
InformationsquelleAutor Hammer | 2014-04-09

 

2 Replies
  1. 78

    JSON.stringify restituisce un String. Così, per esempio:

    var data = [
        { id: 1, name: "bob" },
        { id: 2, name: "john" },
        { id: 3, name: "jake" },
    ];
    
    JSON.stringify(data)

    verrà restituito l’equivalente di:

    "[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]"

    come String valore.

    Così, quando si ha

    <% for(var i=0; i<JSON.stringify(data).length; i++) {%>

    cosa che finisce per guardare come è:

    <% for(var i=0; i<"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]".length; i++) {%>

    che è probabilmente non ciò che si desidera. Quello che probabilmente fare che voglio è qualcosa di simile a questo:

    <table>
    <% for(var i=0; i < data.length; i++) { %>
       <tr>
         <td><%= data[i].id %></td>
         <td><%= data[i].name %></td>
       </tr>
    <% } %>
    </table>

    Questo visualizzerà la seguente tabella (con l’esempio data da sopra):

    <table>
      <tr>
        <td>1</td>
        <td>bob</td>
      </tr>
      <tr>
        <td>2</td>
        <td>john</td>
      </tr>
      <tr>
        <td>3</td>
        <td>jake</td>
      </tr>
    </table>
    • Ciao ! Questo è corretto. ma come fare la stessa cosa con il html rendering della pagina, non con il ejs??
    • Che non è possibile. Con EJS è possibile utilizzare codice JS prima il rendering cosa succede.

Lascia un commento