【问题标题】:ReferenceError: window is not defined after Ajax call trying to redirect the userReferenceError:在尝试重定向用户的 Ajax 调用后未定义窗口
【发布时间】:2017-10-28 11:54:16
【问题描述】:

我是使用 EJS 表达的新手。

我尝试使用 ajax 发布请求将值提交到数据库。

 $.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

我认为节点中没有位置对象,因此出现此错误,但我不知道如何解决此问题,请建议

【问题讨论】:

  • window 是浏览器 javascript 运行时的全局对象。在节点中,全局对象称为global,它没有位置
  • 逻辑全错了。无法在服务器上创建重定向以供浏览器在 ajax 请求中访问。考虑返回响应对象,告诉客户端代码它需要重定向或使用响应数据

标签: jquery node.js ajax express ejs


【解决方案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');
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2020-10-08
    • 2018-05-27
    • 2020-09-18
    • 1970-01-01
    • 2011-10-27
    • 2021-02-02
    相关资源
    最近更新 更多