测试URL是否有效(服务器响应= 200)

时间:2014-04-22 10:08:57

标签: javascript forms angularjs

我正在尝试检查表单中用户提供的网址是否有效,即服务器的响应是否为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-focus'

1 个答案:

答案 0 :(得分:1)

简短回答:您需要将focusout回调包裹在$scope.$apply

答案很长:$.focusout是jQuery并且在Angular的摘要周期之外运行。因此,Angular不会使摘要结束信号触发$http.post。当您键入其他字段时,摘要周期将完成,最后$http.post将触发。

建议更正:

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