2017-05-27 7 views
1

EJSで表現するのが初めてです。ReferenceError:Ajaxコールの後にユーザーがリダイレクトされた後にウィンドウが定義されていません

DBに値を送信するための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 

私はこのように、このエラー、ロケーションオブジェクトがノードに存在しないと思うが、やはり私はこの問題を解決する方法を知らない、あなたがres.redirect('/')を使用することができますNode.jsのでは

+0

'window'ブラウザのJavaScript実行時のグローバルオブジェクトです。そしてノード内でグローバルオブジェクトは 'global'と呼ばれ、場所は –

+0

であり、これを見てください:https://stackoverflow.com/questions/11355366/nodejs-redirect-url – niceman

+1

論理はすべて間違っています。 ajaxリクエストでは、ブラウザのサーバーへのリダイレクトを作成できません。応答データをリダイレクトまたは消費する必要があることをクライアント側のコードに伝える応答オブジェクトを返すことを検討してください – charlietfl

答えて

1

を提案し、それが機能して下さいGETリクエストでのみ送信されます。この状況の正しい方法は、リダイレクトステータスコードのサーバーから応答を返すことです。302と、ステータスコードが302の変更場所に等しいかどうかをajaxスクリプトで確認します。

あなたのコードは次のようになります。

$.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'); 
    }); 
}); 
関連する問題