验证后如何使用异步返回值?

时间:2017-06-12 08:34:44

标签: jquery html ajax

我已经尝试了几个小时才能在验证后从我的函数中获取值,但它似乎无法正常工作。我试过看类似的线程,但仍然无法理解他们的答案。这是我的代码。

/*$("#submit").click(function(){
    // Set form variable
    var form = $('#loginform');           

    form.submit(function(event){              
      var userid = $('#userID').trim(userid); 
      var password = $('#Password').trim(password); 
        // Process AJAX request
        var validate = $.post('http://localhost:3000/api/login',
               $("loginform").serialize(), function(data){
                   alert(data);
        });

      // Prevent default form action
      event.preventDefault();
    });
}); */
function ajaxcall(url, data, callback) {
$.ajax({
    "url": "http://localhost:3000/api/login", // server url
    "type": 'POST', //POST or GET 
    "data": "#loginform", // data to send in ajax format or querystring format
    "datatype": 'json',
    "beforeSend": function() {
        alert('sending data');
         // do some loading options
    },
    success: function(data) {
        if(data=="Login Success"){
            callback(true); // return data in callback
        } else {
            callback(false);
    }},

    complete: function() {
        alert('ajax call complete');
        // success alerts
    },

    error: function(xhr, status, error) {
        alert(xhr.responseText); // error occur 
    }

});
}

评论的第一部分基本上是我尝试过但也失败了所以我决定使用$.ajax而不是看起来没有变化。这是我的HTML代码。

<form method="POST" action="index.html" id="loginform" onsubmit="return ajaxcall(callback)" >

我正在寻找一些代码供我参考或作为参考或简单的解释等。我之前已经看过并试过但它不起作用所以我猜它与我的代码本身有关而不是HTML。请原谅我提出同样的问题,但在阅读了这个帖子几个小时后,我几乎陷入了困境。

How do I return the response from an asynchronous call?

服务器代码:

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

PS:这是为了调用我的api,然后检查数据库以查找用户的条目,如果不存在则输出响应&#34;无效的登录ID或密码&#34;并保持在同一页面上,但如果有用户的条目,则会输出&#34;登录成功&#34;然后将其重定向到index.html。对不起,如果我不清楚。

2 个答案:

答案 0 :(得分:0)

我在表单提交方面遇到了类似的问题。然后找到了这个,http://malsup.com/jquery/form/#getting-started

看看这个插件。

注意:尝试从服务器返回codes而不是字符串,或者将它们解析为JSON。这通常是最好的做法。

答案 1 :(得分:0)

您必须将键值对传递给data属性

“对象必须是键/值对。” http://api.jquery.com/jquery.ajax/

因此您必须将数据更改为以下内容:

data: {loginform_id: "#loginform"},

您还必须从ajax属性中删除"无处不在。

e.g。改变这个:

"url": "http://localhost:3000/api/login", // server url
"type": 'POST', //POST or GET 
"data": "#loginform", // data to send in ajax format or querystring format
"datatype": 'json',
"beforeSend": function() {
    alert('sending data');
     // do some loading options
},

到此:

url: "http://localhost:3000/api/login", // server url
type: 'POST', //POST or GET 
data: {loginform_id: "#loginform"}, // data to send in ajax format or querystring format
datatype: 'json',
beforeSend: function() {
    alert('sending data');
     // do some loading options
},