私はNodeJSにかなり慣れていませんが、Node JSを使用していくつかのAJAXを試したり、ファイルの読み取りと書き込みを試したりしています。ここで知りたいのは、Node JSサーバーがHTMLページに変更を指示できるかどうか、またはサーバーから変更方法に関する情報を受け取るためにページから何らかの要求が必要かどうかです。
(うまくいけば)明確にするために:ajax-retrieve
クリックするとノードJSサーバーからの情報を要求するIDのボタンがあるとします。
$('#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ページが必要なデータを受け取り、それに応じて表示を変更するための、ある種のコールバックが必要ですか?これは基本的な質問かもしれませんが、私が説明したことは可能ですか?