在onsubmit函数调用中未定义对象变量

时间:2017-09-20 21:11:46

标签: javascript jquery express

重定向函数在提交表单时被调用,由于某种原因,数据对象没有被带入函数并开始传递给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'));
                        }
                    });

};

1 个答案:

答案 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