【问题标题】:Asynchronously checking if email is taken already using AngularJS异步检查电子邮件是否已经使用 AngularJS
【发布时间】:2014-12-29 14:54:51
【问题描述】:

我有以下电子邮件字段用于接收用户输入的电子邮件。一旦输入了电子邮件并且焦点从ng-blur字段中移开,就会触发检查用户输入的电子邮件是否已被使用的功能:

<input type="email" class="form-control" placeholder=""  ng-model="email" name="email" required ng-blur="isFound(email)">

为了显示错误,我有以下跨度:

<span class="help-block error" ng-show="blurred && isTaken">Email is taken already</span>

这里是函数isFound(email)

  $scope.isFound = function(email) {
      service.isEmailTaken(email).then(function(data) {
        console.log(data); //this shows either null or the returned data
        $scope.blurred = true;
        if(data == null) {
            $scope.isTaken = false;
        } else {
            $scope.isTaken = true;
        }
      });
  }

现在,当我尝试接收已被占用的电子邮件时,它会正确显示消息。但在那之后,即使我输入了未被接收的电子邮件,它仍然显示与Email is taken already相同的消息。

有人可以帮我理解它发生的原因以及如何解决它吗?

编辑 - 在下面添加 AngularJS 和 NodeJS/ExpressJS/Mongoose 代码:

AngularJS

factory.isEmailTaken = function(email) {
  return $http({url: "/api/queries/email/" + email, method: "GET"}).then(function(resp) {
      return resp.data;
  });
};

ExpressJS/NodeJS/Mongoose

app.get('/api/queries/email/:email', function (req, res) {
    Query.findOne({email: req.params.email}, function (err, query) {
        if (err)
            res.send(err);
        res.json(query);
    });
});

【问题讨论】:

  • 您是否检查过您的服务器是否返回了正确的数据?我认为您发布的代码没有任何问题(除了我没有看到服务代码)。
  • if(data == null) ??您肯定会从服务器发送响应
  • @DennisRongo:是的,当电子邮件尚未被接收时,我会得到null,而当电子邮件已经被接收时,我会得到正确的非空数据。我只是无法让它正常工作。我不知道自己犯了什么错误。
  • @charlietfl:是的,我用console.log(data)检查从服务器返回的数据。
  • 你能发布你的 Angular 服务代码吗?

标签: angularjs node.js email express mongoose


【解决方案1】:

当电子邮件未被接收时,data 的值是 nulltypeof dataString。 之前没有工作的原因是if(data == null) 总是变成false

if(data == 'null') 一切正常。

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2017-10-09
    • 2017-09-13
    相关资源
    最近更新 更多