2014-04-22 118 views
0

我想检查是否由用户在表单中所提供的是一个有效的,也就是说,如果服务器的响应是200测试是URL是有效的(服务器响应= 200)

我想运行检查用户何时在字段中键入内容以及何时丢失焦点。因为同源策略的,我运行在服务器端的检查:

客户端代码:

// test url when input loses focus 
    angular.element(document).ready(function() { 
     $('#target_url').focusout(function() { 
      if ($('#target_url').hasClass('ng-dirty')){ 
       $http.post('/test-url', { target_url: scope.newJob.target_url }).success(function(response){ 
        if (response === 'valid url'){ 
         console.log('valid url'); 
        }else{ 
         console.log('url not valid'); 
        } 
       }); 
      }; 
     }); 
    }); 

服务器端:

// url testing route 
app.post('/test-url', function(req, res) { 
    request(req.body.target_url, function (err, response) { 
     if (response && response.statusCode === 200) { 
      res.send('valid url'); 
     }else{ 
      res.send('url not valid'); 
     } 
    }) 
}); 

我在这里的问题是,响应没有当我失去焦点时打印到控制台,但只有当我开始在另一个输入中输入内容时。我做错了什么?

注:我使用的角度1.1.5这就是为什么我没有使用“NG焦点”

回答

1

简短的回答:你需要用的focusout回调$scope.$apply

长答案:$.focusout是jQuery,它运行在Angular的摘要循环之外。因此Angular没有得到结束信号来触发$http.post。当你输入另一个字段时,一个摘要循环完成,最后触发$http.post

建议修正:

$('#target_url').focusout(function() { 
    $scope.$apply(function() { 
     ...existing code here... 
    }); 
}); 
+0

这不是对角1.2真实。它是否真的以角度1.1的方式工作? – zeroflagL

+0

谢谢!效果很好 – Spearfisher

相关问题