设置简单的服务器,
var express = require('express');
var app = express();
var rooms = {};
....
app.listen(port, function(){console.log('Server Starts...\n');});
在通用处理程序代码中,我可以像这样发送一个json文件:
app.post('/test',function(req,res){
.....
json = { 'status' = true, 'id' = new_id };
res.end(JSON.stringify(json));
});
或者就像这样:
app.post('/test',function(req,res){
.....
json = { 'status' = true, 'id' = new_id };
res.json(json);
});
stringify是用字符串转换它(这很清楚)但是当它更好地使用这个或那个? 有没有更好的方法用于发送带有快速的json对象?
在这两种情况下,我该如何处理对象的接收?
我尝试了以下代码:
newid: function(){
var new_id;
$.post('/test',new_id);
return new_id;
}
但我的html文件中的javascript无法看到它(未定义):
<script>
var test = function() {
json = newid();
alert(json);
}
....
<button onclick="test()">NewId</button><br>
....
答案 0 :(得分:0)
我找到了解决方案,使其能够使用服务器端描述的第二个选项:
...
json = { 'status' = true, 'id' = new_id };
res.json(json);
当然,new_id是我代码中的一个变量。 更改是在客户端完成的,我发送一个返回值的函数instad:
newid: function(){
$.post('/test', function(data){
if( data.status ) console.log(data.new_id)
})
},
答案 1 :(得分:0)
与原始问题上留下的评论一样,你传递给express .json函数的是一个对象,所以你的代码应该更像:
app.post('/test',function(req,res){
.....
let responseObject = { 'status' = true, 'id' = new_id };
res.json(responseObject);
});
这将返回JSON,就像对其进行字符串化一样,但使用.json也会设置所有正确的标题。
您无法从服务器端代码看到任何内容的原因是您尝试在发送回调的同时使用$ .post的客户端。您还需要更改代码,因为$ .post函数希望您将回调作为第二个参数发送。
来源:https://api.jquery.com/jquery.post/
newid: function(callback){
$.post('/test', callback, 'json');
}
然后你需要通过
传递回调函数<script>
var test = function() {
json = newid(function(object) {
alert(object);
}
}
....
<button onclick="test()">NewId</button><br>
....
希望这有帮助。