异步检查是否已使用AngularJS发送电子邮件

问题描述:

我有以下电子邮件字段用于输入电子邮件的用户。一旦电子邮件已经进入和重点是从外地ng-blur带走触发检查是否由用户输入的电子邮件已经采取了以下功能:异步检查是否已使用AngularJS发送电子邮件

<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 /猫鼬下面的代码:

AngularJS

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

ExpressJS /的NodeJS /猫鼬

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); 
    }); 
}); 
+0

您是否检查过您的服务器是否正在返回正确的数据?我认为您发布的代码没有任何问题(除非我没有看到服务代码)。 – 2014-11-03 00:10:07

+0

'if(data == null)'??当然,你发送服务器的响应 – charlietfl 2014-11-03 00:10:14

+0

@ DennisRongo:是的,当电子邮件没有被采取时,我会得到'null',并且在电子邮件已经被使用时得到正确的非空数据。我只是无法正常工作。我不知道我犯了什么错误。 – skip 2014-11-03 00:18:33

当电子邮件没有被采纳为的价值是null,并且typeof dataString。 它之所以不工作的原因是因为if(data == null)总是变成false

if(data == 'null')得到的东西正常工作。