2017-06-13 3 views
1

Ich verstehe nicht, warum mein Code die Fehlerfunktion anstelle von Erfolg ausführt. Ich erhalte diese von meinem console.logAjax- Warum bekomme ich eine Fehlerfunktion statt Erfolg?

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

ich nicht aus irgendeinem Grund denken konnte, warum es meine Logik nicht ausführen, so habe ich versucht, eine Umleitung in meine Fehlerfunktion setzen, und das ist, was ich bekommen

Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
Im Grunde ist das gleiche passiert, so wie von jetzt habe ich nicht wirklich eine Idee, was mein Problem ist nach der Bearbeitung der windows to window. Dies ist mein Code in 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"); 

    } 
}); 
} 

Das ist mein HTML-Code ist. Ich benutze onclick.

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

Also genau was schief gelaufen in meinem Code? Ich versuche mein login api (localhost: 3000/api/login) über ajax mit post aufzurufen, welches dann mongodb nach korrekten einträgen durchsucht und Login Success ausgibt, die dann auf eine andere Seite umleiten wenn die Eingabe korrekt ist und auf der gleichen Seite bleibt Die Eingabe ist falsch, wenn der Ausgang "Ungültige Anmelde-ID oder Passwort" eingegeben wird.

UPDATE:

Server Side-Code

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

Sie müssen diese 'Uncaught ReferenceError: Fenster ist nicht definiert' zuerst –

+0

Es ist window.location. Nein 's'. =) – Repo

+0

@Repo Ich reedited es und es gibt denselben Fehler, so bleibt mein Problem. –

Antwort

1

Wenn ich mich richtig erinnere, ist der Erfolg Rückruf nur dann, wenn der HTTP-Return-Code genannt 2xx ist. Wenn Sie eine Umleitung zurücksenden, wird dies als Fehler betrachtet.

Die Dokumentation erwähnt es:

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.

Von http://api.jquery.com/jquery.ajax/ Abschnitt status.

Darüber hinaus müssen Sie vorsichtig sein: Wenn eine AJAX-Anfrage eine 302 Antwort erhält, wird es keine Umleitung tun: das ist der Benutzeragent Ihres Webbrowsers (klassische Navigation), der das automatisch tut, aber für XHR/AJAX, du musst es implementieren.

+0

Ich bin mir nicht sicher, ob ich dein Problem verstehe: wie im Titel angegeben, verstehst du nicht warum Der Fehler Callback wird aufgerufen.Sie erwähnen, dass Sie Ihren Anmeldeendpunkt auf Ihrem Server aufrufen, und wenn die Anmeldeinformationen gut sind, möchten Sie den Benutzer auf eine Seite umleiten. Wenn die AJAX-Anfrage eine Antwort von 302 erhält, ist es normal, dass der Fehlerrückruf aufgerufen wird. Sie protokollieren das Objekt, das Sie in Parameter erhalten, aber ich sehe nichts falsch mit diesem Objekt, was möchten Sie stattdessen erhalten? – sjahan

+0

Im Grunde möchte ich in der Lage sein, Erfolgsfunktion zu bekommen, so dass ich True oder False je nach der Ausgabe durch die API zurückgegeben werden kann, nachdem es die Eingabe verarbeitet hat, die dann je nach wahr oder falsch umleiten würde, aber jetzt bekomme ich immer Fehler erhalten was ich hineingesteckt habe. Sorry, wenn ich unklar war –

+0

Wie @farhadamjady erwähnt, denke ich, wir vermissen deine Code-Server-Seite: Was sendet dein Server zurück? Was ist der HTTP-Antwortcode? Der Antwortcode bestimmt, welcher Rückruf aufgerufen wird. – sjahan