2013-09-21 11 views
5

Voglio implementare una funzione di ricerca sul mio sito Web, quindi quello che faccio è effettuare una chiamata jquery ajax con il testo al server express che cerca mongodb e dà un array di oggetti degli utenti che corrispondono. Ora ricevo questo oggetto con successo ma poiché non ci sono partials su ejs come posso aggiornare solo la lista dei risultati che genera l'html per ogni utente?Come generare contenuti su ejs con jquery dopo una chiamata ajax per esprimere il server

risposta

9

I pacchetti nodo EJS sono dotati di una libreria javascript lato client situata in ./node_modules/ejs/ejs.js o ./node_modules/ejs/ejs.min.js. Dopo averlo incluso nella pagina, ti consigliamo di caricare il modello, quindi generare l'HTML dal modello. Detecting an undefined object property Javascript campione (il caricamento del modello al caricamento della pagina sarebbe un po 'più ideale):

function getData() { 
    // Grab the template 
    $.get('/results.ejs', function (template) { 
     // Compile the EJS template. 
     var func = ejs.compile(template); 

     // Grab the data 
     $.get('/data', function (data) { 
      // Generate the html from the given data. 
      var html = func(data); 
      $('#divResults').html(html); 
     }); 
    }); 
} 

EJS:

<table> 
    <tr> 
     <th>ID</th> 
     <th>Name</th> 
    </tr> 
    <% data.forEach(function (d) { %> 
    <tr> 
     <td><%- d.id %></td> 
     <td><%- d.name %></td> 
    </tr> 
    <% }); %> 
</table> 

Ajax chiamata in veloce:

app.get('/data', function (req, res) { 
    res.send({ data: [ 
     { id: 5, name: 'Bill' }, 
     { id: 1, name: 'Bob' } 
    ]}); 
}); 
+0

Can voi posto la funzione 'getData' all'interno del template stesso o dovrai creare un file' script' esterno contenente la funzione che verrà poi iniettata all'interno della tua pagina? – AllJs

+0

@AllJs, Per quanto ne so puoi inserirlo nello script, tuttavia, penso che sarebbe meglio organizzato se tu avessi un file di script esterno. – matth

Problemi correlati