用玉石更新页面的一部分?

jos*_*sef 1 javascript node.js pug

我正在尝试进行搜索并将结果发送回同一个站点,我已经有了搜索工作,但我无法将结果发送回去.我希望启动站点在没有页面重新加载的情况下呈现信息.

如何将搜索结果发送回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{
        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

index.jade

extends layout
block content
    block child
Run Code Online (Sandbox Code Playgroud)

child.jade

extends index
block child
    !{document}
Run Code Online (Sandbox Code Playgroud)

Van*_*ing 5

您可以通过以下方式执行此操作:

首先,你可以index.jade像这样更新你的:

extends layout
block content
    #content
        block child
Run Code Online (Sandbox Code Playgroud)

然后,应该有一些函数来调用以获得结果.我会叫它getResults.在该函数的回调中,您现在可以执行以下操作:

getResults(function(results){
    document.getElementById("content").innerHTML = results;
});
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.

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);
Run Code Online (Sandbox Code Playgroud)

意见/ 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()")
Run Code Online (Sandbox Code Playgroud)

运行它node server.js并访问localhost.你应该从中学习它是如何完成的;)

  • 我不确定我理解你.您无法从服务器更新客户端.客户端必须使用它从服务器请求的数据更新自身.您必须从客户端到服务器的XMLHttpRequest加载数据.我将以一个例子更新我的答案. (2认同)