【问题标题】:Variable from ajax function doesnt work outside function [duplicate]来自ajax函数的变量在函数之外不起作用[重复]
【发布时间】:2015-02-26 14:17:50
【问题描述】:

我有简单的注册表单。 Ajax 和表单工作正常,但无法通过变量连接它们,我的意思是当 ajax 检查电子邮件是否在数据库寄存器中时,应该通过变量 error 停止,但它不是。

代码:

$('.login').submit(function(e) {

        e.preventDefault(); 
        var error = 0;
        var self = $(this);

        var $name = self.find('[type=name]');
        var $email = self.find('[type=email]');
        var $pass = self.find('[type=password]');

        //MY AJAX
        var email = $email.val();


$.ajax({
    url: 'http://localhost/FPD/nowe/inc/rejestracja.php?action=emailcheck',
    data: {
        'email': email
    },
    type: 'POST',
    success: function(odp) {
        if (odp == 1) {
            createErrTult("Błąd! taki email już istnieje w bazie!", $email)

//THAT ERROR VARIABLE DOESNT WORK OUTSIDE AJAX FUNCTION
                error++;
        }
    },
    error: function(xhr, textStatus, error) // THOSE ROWS
    {
       alert(error);
    }
});

        if (error!=0)return;

//THAT STILL WORKS EVEN AJAX ERROR

        self.find('[type=submit]').attr('disabled', 'disabled');

        self.children().fadeOut(300,function(){ $(this).remove() })
        $('<p class="login__title">sign in <br><span class="login-edition">welcome to A.Movie</span></p><p class="success">You have successfully<br> signed in!</p>').appendTo(self)
        .hide().delay(300).fadeIn();


        // var formInput = self.serialize();
        // $.post(self.attr('action'),formInput, function(data){}); // end post
}); // end submit

【问题讨论】:

  • 检查一下,这将是你的问题:stackoverflow.com/questions/5976142/… Ajax 是异步的,所以我想,你想稍后使用它
  • 你应该全局声明错误变量。
  • AJAX(Asynchronous) 不会等到您从服务器收到某些东西。由于它是异步的,因此您的 error 变量为零并且该过程继续进行。在ajax调用中使用async: false使其同步。

标签: javascript jquery ajax


【解决方案1】:

原因是ajax是异步调用的。您必须在您的 ajax 调用中使用 async: false。所以你的代码会变成:

$.ajax({
    url: 'http://localhost/FPD/nowe/inc/rejestracja.php?action=emailcheck',
    data: {
        'email': email
    },
    async : false,   //<----
    type: 'POST',
    success: function(odp) {
        if (odp == 1) {
            createErrTult("Błąd! taki email już istnieje w bazie!", $email)

//THAT ERROR VARIABLE DOESNT WORK OUTSIDE AJAX FUNCTION
                error++;
        }
    },
    error: function(xhr, textStatus, error) // THOSE ROWS
    {
       alert(error);
    }
});

这将确保在 ajax 调用之后不会执行任何操作,除非您得到响应。

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 2012-12-10
    • 2021-01-03
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多