2017-06-13 3 views
1

なぜ私のコードが成功ではなくエラー関数を実行しているのかわかりません。私は私が私が私の誤差関数にリダイレクトを入れてみました、これは私がAjax-なぜ、私は成功の代わりにエラー関数を取得するのですか?

得るものです、それは私のロジックを実行しない理由何らかの理由を考えることができなかった私はconsole.logから

Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}

これを得続けます

Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
は、基本的には同じことが今のように私は本当に私の問題はwindows to windowを編集した後は何かについてのアイデアを持っていないが起こりました。 これは、これは私のhtmlコードであるJS

function login(){ 
var username = document.getElementById("userID").value; 
var password = document.getElementById("Password").value; 
var postData = { "userID": username, "Password": password }; 
var postJSON = JSON.stringify(postData); 

$.ajax({ 
    url: "http://localhost:3000/api/login", // server url 
    type: "POST", //POST or GET 
    contentType: "application/json", 
    data: postJSON, // data to send in ajax format or querystring format 
    datatype: "JSON", 

    success: function(response) { 
     alert('success'); 
     console.log(response); 
     window.location.replace("http://localhost/index.html"); 
    }, 
    error: function(response) { 
     alert('error'); 
     console.log(response); 
     window.location.replace("http://localhost/index.html"); 

    } 
}); 
} 

で私のコードです。私はonclickを使用しています。

<input class="button" type="submit" id="submit" value="Log In" onclick="return login()"/> 

正確に私のコードで何が問題になったのですか?私は私のログインapi(localhost:3000/api/login)をajaxでポストと呼ぶことを試みています。正しいエントリがあるかどうかmongodbをチェックして、Login Successを出力し、入力が正しい場合は別のページにリダイレクトし、 「無効なログインIDまたはパスワード」を出力することによって入力が間違っています。

UPDATE:HTTPの戻りコードが2xxある場合

サーバー側のコード

var MongoClient = require('mongodb').MongoClient; 
var url = 'mongodb://localhost:27017/myproject'; 

var authenticate = function(db, req, callback){ 
var cursor = db.collection('LoginID').find({"_id" : req.body.userID, 
"Password" : req.body.Password 
}).count(function(err,doc){ 
     if(err) return callback(err); 
     if(doc == 0){ 
      console.log('Invalid Login ID or Password'); 
      return callback(null, doc); 
     } else { 
      console.log('Login Success'); 
      return callback(null, doc); 
     } 
    }); 
} 
module.exports = { 
postCollection : function(req,res){ 
    var username = req.body.userID; 
    var Password = req.body.Password; 
    //var createdDate = "<b>" + day + "/" + month + "/" + year + "</b>" 
    MongoClient.connect(url, function(err, db) { 
     //assert.equal(null, err); 
     if(err) { 
      res.send(err); 
      res.end(); 
     } 
     authenticate(db, req, function(err,doc) { 
      if(err) 
       res.send(err); 
      else{ 
        if(!doc){ 
         res.send(' Invalid Login ID or Password '); 
         res.end(); 
        } else { 
         res.send("Login success") 
         res.end(); 
        } 
       } 
      db.close(); 
     }); 
    }); 
} 
} 
+0

この「Uncaught ReferenceError:windowsは定義されていません」を再提出する必要があります。 –

+0

window.locationです。いいえ '。 =) – Repo

+0

@Repo私はそれを再編集し、同じエラーが出るので、私の問題は残ります。 –

答えて

1

私の記憶が正しければ、成功コールバックのみと呼ばれます。 リダイレクトを送り返すと、エラーとみなされます。

ドキュメントはそれを言及:http://api.jquery.com/jquery.ajax/から

If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error (including 3xx redirect), they take the same parameters as the error callback.

、からstatusCodeセクション。

さらに、AJAXリクエストが302レスポンスを受信した場合、リダイレクトは実行されません。これは自動的にXHRを実行するWebブラウザ(古典的なナビゲーション)のユーザーエージェントです/ AJAX、あなたはそれを実装する必要があります。

+0

私はあなたの問題を理解していません。タイトルに記載されているように、エラーコールバックが呼び出されます。サーバー上でログインエンドポイントを呼び出すと言いますが、資格情報が良好な場合は、ユーザーをページにリダイレクトする必要があります。 AJAX要求が応答して302を取得した場合、エラーコールバックが呼び出されるのは正常です。あなたはパラメータで取得したオブジェクトをログに記録しますが、このオブジェクトに何も間違いはありませんが、代わりに何を得たいのですか? – sjahan

+0

基本的に私は成功関数を得ることができるように、真または偽に応じてリダイレクトする入力を処理した後、APIによって与えられた出力に応じて真または偽を返すことができるようにしたいが、今は私が入れたもの。わからないのならごめんなさい –

+0

@farhadamjadyが言及したように、私はあなたのコードがサーバー側で紛れていると思います。あなたのサーバーは何を返信しますか? HTTPレスポンスコードとは何ですか?応答コードは、呼び出されるコールバックを決定します。 – sjahan

関連する問題