我正在使用基本的node.js 介绍脚本,并且我在命令行中传递参数。 我希望这个参数在运行后传递回客户端。我可以传回任何纯文本或值,但无法传回包含相同信息的变量。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>get test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js">
</script>
</head>
<body>
<h1>Get Test</h1>
<div id="test"></div>
<script>
$(document).ready(function() {
$.ajax({url: 'http://localhost',dataType: "jsonp",jsonpCallback: "_testcb",cache: false,timeout: 5000,success: function(data) {
$("#test").append(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
});
</script>
</body>
</html>
这是我的服务器代码:
var http = require('http');
var arr = new Array();
http.createServer(function (req, res) {
res.writeHead(200);
// print process.argv
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
arr[index] = val;
res.write("Size" + val);
res.end('_testcb(\'{"Size: \' + val + \'"}\')');
});
console.log(arr[2]);
}).listen(80);
所以我的问题是,如何传回对象/变量/数组而不是静态文本?
最佳答案
如果您尝试将数据发送到客户端,则需要将数据序列化为 JSON,以便将值发送到客户端。
例如,要将所有参数发送给客户端,您只需将方法更改为:
http.createServer(function (req, res) {
res.writeHead(200);
res.write("_testcb(" + JSON.stringify(process.argv) + ")");
}).listen(80);
这将使data
(在客户端)成为进程所有参数的数组。
如果您想传递不同类型的对象,请按照您想要的方式创建变量,然后再次使用 JSON.stringify
将数据转换为可以发送的文本。例如:
http.createServer(function (req, res) {
res.writeHead(200);
// create an empty object
var data = {};
// add a size attribute
data["Size"] = process.argv[1];
res.write("_testcb(" + JSON.stringify(data) + ")");
}).listen(80);
这一切的关键是 JSON.stringify
方法 - 它允许您将变量转换为 JSON,然后客户端将其解析为数据。
关于javascript - Node JS 返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624069/