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

Test is URL is valid (server response = 200)

本文关键字:响应 服务器 URL 有效 测试      更新时间:2023-09-26

我正在尝试检查用户在表单中提供的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焦点"

简单回答:您需要将focusout回调封装在$scope.$apply中。

长话短说:$.focusout是jQuery,运行在Angular的摘要周期之外。因此Angular没有得到摘要信号的末尾来触发$http.post。当您键入另一个字段时,一个摘要循环就完成了,最后$http.post会启动。

建议修正:

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