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