然后在ajax返回之前运行

时间:2016-03-23 20:22:12

标签: javascript jquery ajax

我试图在使用then完成ajax返回后运行一个函数,但它似乎在返回之前运行。我的代码如下:

  var existingUser = false;

  $.ajax(
            {
                url: '/ajax/signup',
                data: { signup_email: signupEmail },
                type: 'post',
                dataType: 'json',
                success: function(data) {
                    if (data.message == 'The email address '+signupEmail+' has already been registered.') {
                        existingUser = true;
                        console.log('truth!')
                    }
                }
            }
        )
            .then(console.log(existingUser))

我希望记录

truth!
true

如果返回有预期的消息,而是记录

false
truth!

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

传递给then的参数应该是一个函数。在您的情况下,console.log将立即执行,因此您将获得输出。

参考这两个例子 http://jsfiddle.net/9L7dD/12/ http://jsfiddle.net/9L7dD/13/

答案 1 :(得分:0)

这是因为启动ajax请求的函数调用在ajax请求完成之前完成。实质上:

  1. 启动ajax请求
  2. 输出existingUser
  3. 输出"真相"
  4. 您可以在console.log处理程序中添加success吗?

答案 2 :(得分:-1)

您的问题是您的ajax请求在履行承诺并接收响应时执行成功......以及非错误响应。 "然后"只需在运行ajax函数后执行,而不是在它被解析后(从您的URL获取响应)。看起来你真的不需要你的console.log在"然后"如果正确执行,您已经检查了成功函数。