2014-10-29 55 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

你是否也在客户端上使用jade,或者只在服务器上运行?如果没有,你也必须在那里包括它。或者您可以在服务器上将结果呈现为html,然后在客户端上通过.innerHTML = value – 2014-10-29 09:15:07

+0

no将其设置在客户端上 – josef 2014-10-29 09:17:15

+0

然后,为什么您的页面列表函数会发送html?你打算改变它发送回JSON? – 2014-10-29 09:19:02

回答

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 2014-10-29 09:50:22

+2

我不知道我理解你。您无法从服务器更新您的客户端。客户端必须使用它从服务器请求的数据进行更新。您必须从客户端到服务器的XMLHttpRequest,加载数据。我会用一个例子更新我的答案。 – 2014-10-29 09:54:01

+0

......你知道,如何在客户端执行JavaScript? – 2014-10-29 09:55:53