异步检查是否已使用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);
});
});
答
当电子邮件没有被采纳为的价值是null
,并且typeof data
是String
。 它之所以不工作的原因是因为if(data == null)
总是变成false
。
if(data == 'null')
得到的东西正常工作。
您是否检查过您的服务器是否正在返回正确的数据?我认为您发布的代码没有任何问题(除非我没有看到服务代码)。 – 2014-11-03 00:10:07
'if(data == null)'??当然,你发送服务器的响应 – charlietfl 2014-11-03 00:10:14
@ DennisRongo:是的,当电子邮件没有被采取时,我会得到'null',并且在电子邮件已经被使用时得到正确的非空数据。我只是无法正常工作。我不知道我犯了什么错误。 – skip 2014-11-03 00:18:33