2017-06-01 67 views
0

我正在尝试编写一个循环来每30秒更新一次网页,但我不确定如何使用setInverval函数进行ajax调用。这里是我的服务器代码:使用Ajax和Nodejs更新页面上的数据

var app = express() 
app.get('/', function(req, res){ 
// error here 
res.sendFile('./index.html',{root: __dirname}) 
//...Some data 
res.send(data) 
}); 

我有我的index.html一个setInverval功能:

<script> 
function ajaxCall(){ 
    $.ajax({url: "http://localhost:3000/", success: function(result){ 
    // I want to receive new result every 30 seconds 
    }}) 

} 
setInterval(ajaxCall,30000) 
</script> 

因为我不知道该如何处理app.get(“/”)和阿贾克斯的要求,我

Error: Can't set headers after they are sent. 

因为我试图发送数据进行两次

我应该如何修改代码,这样我可以看到我数据在'http://localhost:3000/'上显示,每30秒更新一次?

谢谢。

回答

1

Can't set headers after they are sent通常表示您对请求做出两次回应

你不能那样做。

对于每个request/req应该只有一个response/res

app.get('/', function(req, res) { 
    // you respond to the request here 
    res.sendFile('./index.html',{root: __dirname}); 
    // and you respond again here 
    res.send(data) 
}); 

,如果你想sendFile() OR send(data)该端点决定。

从你的代码来看,你可能希望创建另一个终点,你的AJAX调用,它确实后者

// serve your index 
app.get('/', function(req, res) { 
    res.sendFile('./index.html',{root: __dirname}) 
}); 

// serve your data 
// Your AJAX call should hit this endpoint instead 
app.get('/data', function(req, res) { 
    var data = 'lorem ipsum dolor'; 
    res.send(data); 
}); 
+0

谢谢,我知道这是一个问题。如果我想发送数据并删除sendFile(),我的网页每次刷新时都会更新,但setInterval函数永远不会被调用。 – Deidara

+0

我已经更新了答案 –

+0

非常感谢... – Deidara

0

像尼古拉斯Kyriakides说打,你需要定义如下:

// serve your index 
app.get('/', function(req, res){ 
    res.sendFile('./index.html',{root: __dirname}) 
}); 

// serve your data 
// Your AJAX call should hit this endpoint instead 
app.get('/data', function(req, res) { 
var data = "lorem ipsum dolor"; 
    res.send(data); 
}); 

然后,你需要改变你的AJAX调用:

<script> 
function ajaxCall(){ 
    $.ajax({url: "http://localhost:3000/data", success: function(result){ 
    //do whatever you want with the returned data (in result) 
    //f.e. to update something on your web page, you want something like: 
    document.getElementById("idOfElementYouWantChanged").innerHTML = result; 
    }}) 

} 
setInterval(ajaxCall,30000) 
</script> 
+0

除了获得一些神奇的互联网点,它有什么好做的公然复制/粘贴我的答案? –

+0

当我看到你的回答时,我已经在回答,看起来他仍然不理解这个概念,所以我想给他一个完整的例子。如果我伤害了你的“神奇互联网点”感觉,我很抱歉。我只是在这里帮忙。 – Hijliche

+0

获得真实....... –

相关问题