簡體   English   中英

jQuery Ajax成功發送數據,但完成失敗總是不執行任何操作

[英]jquery ajax succefuly sends data but done fail always doing nothing

我正在為我的nodeJs應用程序登錄頁面。

當我提交表單時,所有數據都發送到我的節點應用程序(很好),

但是jquery ajax的done,fail,always函數一開始根本不起作用,並且經過一段時間(像很多時間一樣),它調用了fail和always函數。 Dunno我的代碼出了什么問題,根本沒有錯誤。

這是我的html客戶端代碼:

<!doctype html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Gatsbill</title>
    <link rel="stylesheet" href="public/css/reset.css">
    <link rel="stylesheet" href="public/css/connection.css">
</head>
<body>
    <div id="content">

        <a href="http://localhost:3001"><img src="public/images/icone.jpg" alt="gatsbill"></a>

        <div id="wrap">

            <div id="subscribe">
                <a href="http://localhost:3001/login" class="click">Se connecter</a>
                <p id="p">Pour vous inscrire,<br> Veuillez remplir les champs ci-dessous</p>
                <div id="message" class="message" style="display: none;"></div>
                <form method="post" id="form">
                    <input type="text" name="username" placeholder="Username" required autofocus id="username">
                    <input type="email" name="mail" placeholder="Email" required id="email">
                    <input type="password" name="password" placeholder="Password" required id="pass1">
                    <input type="password" name="password2" placeholder="Password" required id="pass2">
                    <input type="submit" name="submit" value="Create account" id="submit">
                </form>
            </div>

        </div>
    </div>

    <!-- Script -->
    <script src="public/js/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="public/js/signin.js"></script>


</body>
</html>

我的JavaScript客戶端代碼:

$(document).ready(function() {
    $("#form").submit(function(event){

        event.preventDefault();

        $("#p").hide();
        var pass1 = $('#pass1');
        var pass2 = $('#pass2')


        if (pass1.val().length > 6) {
            if (pass1.val() == pass2.val()) {

                var data = {
                    username: $("#username").val(),
                    email: $("#email").val(),
                    pass: $("#pass1").val()
                };

                var $inputs = $("#form").find("input, select, button, textarea");
                $inputs.prop("disabled", true);

                $.ajax({
                    url: "http://localhost:3001/signin",
                    type: 'post',
                    data: data,
                    dataType: 'json'
                })
                .done(function(data) {
                        alert("done");
                        console.log(data);
                })
                .fail(function( html ) {
                        alert('fail');
                })
                .always(function( html ) {
                        $inputs.prop("disabled", false);
                });

            } else {
                $('#message').text('Les mots de passes doivent être identiques').show();
                pass1.val('');
                pass2.val('');
            }
        } else {
            $('#message').text('Le mot de pass doit faire au moins 7 caractères').show();
            pass1.val('');
            pass2.val('');
        }

    });
});

這是我的節點應用,現在只檢查發布值

var express = require('express');
var swig = require('swig');
var ent = require('ent');
var bodyParser = require('body-parser');
var mongojs = require('mongojs');
var passport = require('passport');

var app = express();
var server = app.listen(3001);
var io = require('socket.io').listen(server);

// Environnement
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/public", express.static(__dirname + "/public"));
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.set('view cache', false);
swig.setDefaults({ cache: false });

//MongoDB
var db =  mongojs("mongodb://127.0.0.1:27017/maBase", ["users"]);



// Page Principale
app.get('/home', function(req,res){
    res.render('login.html',{});
});

// Page connection
app.get('/', function(req,res){
    res.render('index.html',{});
});

app.route('/signin')
    .get(function(req, res, next) {
        res.render('signin.html',{});
    })
    .post(function(req, res, next) {
        if (req.body.email) {
            console.log(req.body.username + req.body.email + req.body.pass);
        }
        else {
            console.log('not ok')
        }
    });

app.route('/login')
    .get(function(req, res, next) {
        res.render('login.html',{});
    })
    .post(function(req, res, next) {

    });

您的客戶端JS代碼看起來不錯。 問題出在服務器端代碼上。 在/ signin POST請求函數中,您沒有給出任何響應(您只是將其記錄在控制台中)。 因此,無論您的客戶端JS代碼是“成功”還是“失敗”,都無法獲得任何響應。 這就是為什么在嘗試了很多次之后,它最終還是變成“總是”。 在服務器超時或沒有響應的情況下,將執行always函數。 嘗試從登錄功能返回響應。 您可以使用傳遞給您的請求函數的“ res”參數提供的“ .json”方法來完成此操作。

像這樣:

app.route('/signin')
.get(function(req, res, next) {
    res.render('signin.html',{});
})
.post(function(req, res, next) {
    if (req.body.email) {
        console.log(req.body.username + req.body.email + req.body.pass);

        res.json("Success");
    }
    else {
        console.log('not ok')

        res.json("Error"); 
    }
});

或您要從服務器返回的其他任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM