ReferenceError:Ajax调用尝试重定向用户后未定义窗口

时间:2017-05-27 19:52:14

标签: jquery node.js ajax express ejs

我是EJS的新人。

我尝试使用。

提交ajax post请求以提交给DB的值
 $.ajax({
    type: 'POST',
    url: '/register',
    data: user,
    success: function(data){
        console.log(data);
        return data;
    }
  });

  return false;

此调用成功,之后控件进入调用函数

var sess;

  app.post('/register',urlencodedParser,function(req,res){
    sess=req.session;
    var newUsr=Users(req.body).save(function(err,data){
      if(err) throw err;
      console.log(" back from ajax with data :::; " + data);

      console.log("step1 cleared");
      sess.registered=true;

    });
    console.log("step2 cleared");
    location.window.href = '/index2';
  });

我希望用户在注册成功后看到索引页面,但我收到以下错误。

ReferenceError: location is not defined

我认为位置对象不存在于节点中,因此出现此错误,但我又不知道如何解决此问题,请提示

1 个答案:

答案 0 :(得分:1)

在Node.js中,您可以使用res.redirect('/'),但它仅适用于GET次请求。在这种情况下,正确的方法是从服务器返回带有重定向状态代码的响应:302并在您的ajax脚本中检查状态代码是否等于302更改位置。

您的代码应如下所示:

$.ajax({
   type: 'POST',
   url: '/register',
   data: user,
   success: function(data, textStatus, response) {
     if(response.status === 302) {
        window.location.href = '/index2';
     }
     return data;
   }
 });

服务器端代码:

var sess;

app.post('/register', urlencodedParser, function(req, res) {
  sess = req.session;
  var newUsr = Users(req.body).save(function(err, data) {
    if (err) throw err;
    console.log(" back from ajax with data :::; " + data);

    console.log("step1 cleared");
    sess.registered = true;

    res.status(302).send('User saved successfully');
  });
});