2017-05-27 173 views
1

我是用EJS表示的新手。ReferenceError:在Ajax調用嘗試重定向用戶之後未定義窗口

我試着做一個ajax post請求提交給數據庫使用的值。

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

我覺得位置對象是不存在的節點,因此這個錯誤,但同樣我不知道如何解決這個問題,請建議

+0

'window'是在瀏覽器的JavaScript運行時的全局對象。並且在節點中,全局對象被稱爲'global',它沒有位置 –

+0

請參閱:https://stackoverflow.com/questions/11355366/nodejs-redirect-url – niceman

+1

邏輯是錯誤的。無法在服務器上創建重定向,以便瀏覽器轉到ajax請求中。考慮返回響應對象,告訴客戶端代碼它需要重定向或使用響應數據 – charlietfl

回答

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'); 
    }); 
});