Javascript Node JS能否提示更改HTML页面?
我对Node JS相当陌生,但一直在尝试使用一些AJAX,并尝试读取和写入文件。我现在想知道的是NodeJS服务器是否可以告诉HTML页面进行更改,或者是否必须有来自页面的请求才能从服务器接收关于如何更改的信息 (希望)澄清:假设我有一个id为Javascript Node JS能否提示更改HTML页面?,javascript,ajax,node.js,jquery,Javascript,Ajax,Node.js,Jquery,我对Node JS相当陌生,但一直在尝试使用一些AJAX,并尝试读取和写入文件。我现在想知道的是NodeJS服务器是否可以告诉HTML页面进行更改,或者是否必须有来自页面的请求才能从服务器接收关于如何更改的信息 (希望)澄清:假设我有一个id为ajax retrieve的按钮,单击该按钮时会从我的节点JS服务器请求一些信息: $('#ajax-retrieve').click(function () { $.ajax({ url: 'http://localhost:81
ajax retrieve
的按钮,单击该按钮时会从我的节点JS服务器请求一些信息:
$('#ajax-retrieve').click(function () {
$.ajax({
url: 'http://localhost:8124/',
data: 'fn=open',
dataType: "jsonp",
cache: false,
timeout: 5000,
success: function(data) {
console.log(data);
$("#input-ready").html(data.save.text);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
});
成功地从服务器接收到一些数据后,回调(如您所见)会将数据记录在控制台中,并将部分数据放入id为input ready
的元素中。但如果请求失败或超时,则会出现一个警报框,提供错误的详细信息
这大致就是服务器端代码的样子:
http.createServer(function (req, res) {
"use strict";
var queryObj = url.parse(req.url, true).query;
queryObj.fn = queryObj.fn || '';
queryObj.callback = queryObj.callback || '';
if (queryObj.callback) {
if (queryObj.fn === 'open') {
fs.readFile('jsonp-storage-2.txt', function (err, data) {
if (err) {
throw err;
} else {
queryObj.save = data;
res.writeHead(200, {'Content-Type': 'application/javascript'});
res.write(queryObj.callback + '({ fn: "' + queryObj.fn + '", save: ' + queryObj.save + ' })');
res.end();
}
});
} else {
console.log('Function (fn property) not recognised.');
}
}
}).listen(8124);
但是,如果服务器在将数据传递到我的HTML页面之前需要对数据进行更复杂的处理,如果服务器的代码可能需要一些时间来完成这项工作,该怎么办?是否有一种方法可以将返回的数据分块,并在准备就绪时返回相关部分,或者需要从我的HTML页面中单独请求
理想情况下,我不希望我的HTML页面必须不断向服务器请求它已经请求的信息,以查看它是否准备好了。我想要的是某种回调,以便当服务器完成时,HTML页面接收到它需要的数据并相应地更改显示?这可能是一个基本问题,但我所描述的是可能的吗?因为您想进行双向查看和。您似乎在描述长轮询,这是一种http连接长时间保持打开状态,数据在可用时以块的形式发送回的技术。更一般地说,我认为您真正感兴趣的是服务器推送——服务器在没有客户端明确请求的情况下发送回数据,这与长轮询近似。我最喜欢的node.js解决方案是一个库,它为服务器推送提供了一个干净的包装,并根据客户端浏览器中的可用内容自动使用多种技术(包括长轮询)。这就是您想要的吗+1谢谢,这可能有用。我不确定我的问题是否重复。。。我觉得发布这个问题的人在知识上比我略胜一筹,所以我必须多读一些,看看这是否是我需要的。在此期间,任何其他建议都是非常受欢迎的。