2014-10-29 4 views
1

Я пытаюсь выполнить поиск и отправить результат на один и тот же сайт, у меня есть поиск, но я не могу получить результат для отправки обратно. Я хочу, чтобы начальный сайт отображал информацию без перезагрузки страницы.Обновить часть страницы в нефритовом?

Как отправить результат поиска обратно на страницу index.jade без необходимости его обновления?

function pagelist(items, res) { 
    var document=''; 
    var db = db_login; 
    if (items != null){ 
      items.forEach(function(item) { 
      document += '<a href=share/'+item._id+' class="searchElement">' 
      document += item.document 
      document += '</div>' 
     }) 
     if(document != ''){ 
      res.send(document); 
     }else{ 
     } 
    } 
} 

index.jade

extends layout 
block content 
    block child 

child.jade

extends index 
block child 
    !{document} 
+0

Вы используете нефрит на клиенте, или только на сервере? Если нет, вы должны включить его там тоже. Или вы можете отобразить результаты на html на сервере, а затем установить его на клиенте через .innerHTML = значение –

+0

нет на клиенте, а также – josef

+0

. Тогда почему ваша функция pegelist отправляет обратно html? Планируете ли вы изменить его на отправку JSON? –

ответ

4

Вы можете сделать это следующим образом:

Во-первых, вы можете обновить ваш index.jade так:

extends layout 
block content 
    #content 
     block child 

И тогда должна быть какая-то функция, которую вы вызываете, чтобы получить ваши результаты. Я назову его getResults. В обратном вызове этой функции теперь вы можете сделать следующее:

getResults(function(results){ 
    document.getElementById("content").innerHTML = results; 
}); 

Я надеюсь, что помогает.

UPDATE

Я дам вам полный пример:

server.js

var express = require("express"); 

var i = 0; 
function getResults(cb){ 
    cb("<div>Result "+(i++)+"</div><div>Result "+(i++)+"</div><div>Result "+(i++)+"</div>"); 
} 

var app = express(); 
app.set("view engine","jade"); 
app.get("/",function(req,res){ 
    getResults(function(results){ 
     res.render("page",{results:results}); 
    }); 
}); 
app.get("/results",function(req,res){ 
    getResults(function(results){  
     res.writeHead(200,"OK",{"Content-Type":"text/html"}); 
     res.end(results); 
    }); 
}); 

app.listen(80); 

просмотров/page.jade

doctype html 
html 
    head 
     script. 
      function update(){ 
       var req = new XMLHttpRequest(); 
       req.open("GET","/results"); 
       req.onreadystatechange = function(){ 
        if(req.readyState == 4){ 
         document.getElementById("content").innerHTML = req.responseText; 
        } 
       } 
       req.send(); 
      } 
    body 
     #content!= results 
     input(type="button",value="Update",onclick="update()") 

Запустите его с node server.js и посетите localhost. Вам следует узнать, как это делается;)

+0

это то, что я хочу сделать, дело в том, что я должен делать это со стороны сервера, и я не знаю, как отправить информацию на клиентов без обновления сайта. – josef

+2

Я не уверен, что понимаю вас. Вы не можете обновить свой клиент с сервера. Клиент должен обновлять себя данными, которые он запрашивает с сервера. Вы должны выполнить XMLHttpRequest от клиента к серверу, который загружает данные. Я верну свой ответ на примере. –

+0

... вы знаете, как правильно выполнить JavaScript на стороне клиента? –

Смежные вопросы