重定向函数在提交表单时被调用,由于某种原因,数据对象没有被带入函数并开始传递给ajax post请求。到调用数据对象时,它有6个属性。表达作品的后期路线是成功的,但我无法获取数据对象。
感谢任何帮助,谢谢。
这部分是快递代码,下面的部分是app.js
const bodyParser = require('body-parser');
const jsonParser = bodyParser.json({ type: 'application/json' });
hbs.registerPartials(__dirname + '/views/partials');
app.set('view engine', 'hbs');
app.use(express.static(__dirname + '/views'));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.post('/Summary',jsonParser, function (req, res) {
console.log("post"+ req.body + ' h');
res.send(req.body);
});
//////// App.js代码/////
var data = {roommate:1};
function redirect(){
var data=JSON.stringify(data);
console.log(data +' f');
$.ajax({
type: 'POST',
data: data,
contentType: 'application/json',
url: 'http://localhost:3000/Summary',
success: function(data) {
console.log('success');
console.log(JSON.stringify(data + 'h'));
}
});
};
答案 0 :(得分:0)
您的原始代码非常接近工作。
我看到的主要问题是:
var data = {roommate:1};
function redirect(){
var data=JSON.stringify(data);
你有两个名为data
的变量,一个在函数外部声明,一个在内部声明。虽然两者都可以,但是执行JSON编码的行只能看到局部变量,而不能看到外部变量。最简单的解决方法是重命名其中一个变量,尽管您可能还想考虑将数据作为参数传递给redirect
函数,而不是依赖于从外部抓取它。
除日志记录外,您的服务器代码看起来很好。这行不会记录任何特别有用的东西,因为它使用字符串连接:
console.log("post"+ req.body + ' h');
req.body
是一个对象,并将它连接起来只会给你post[object Object] h
。而是尝试这样的事情:
console.log("post", req.body, ' h');
除了你的服务器之外的其他应该没问题。
回到客户端代码中,success
处理程序中的日志记录有点偏离:
console.log(JSON.stringify(data + 'h'));
这是一个data
对象,将其与h
连接以提供[object Object]h
,然后尝试对该字符串进行JSON编码。而是尝试这样的事情:
console.log(data, 'h');
或者,如果您愿意,可以:
// Note the 'h' is outside the stringify
console.log(JSON.stringify(data) + 'h');
虽然当前代码确实有效,但如果您希望获得JSON响应,则可以考虑使用$.getJSON
代替$.ajax
。