Angular 和 jQuery Ajax 请求

Angular and jQuery Ajax Request

我在使用 Angular 和 jQuery 时遇到了一些问题,它们在 WebServlet 中静态地对 api 进行了 http 调用。我想使用 ng-show 在 HTML 页面中打印请求结果,但是我不能- 这是我的控制器:

var myApp = angular.module('spicyApp1', []);
myApp.controller('SpicyController', ['$scope', function($scope) {
    $scope.chiliSpicy = function() {
    var url = "http://localhost:8080/RESTnt/";
    var user = "admin";
    var pwd = "password";
    $.ajax({
        type: 'GET',
        url: url + 'login?username='+user+'&password='+pwd,
        dataType: 'xml',
        success: function(data)
            {
                $scope.result = true;
            },
        error: function (data) 
            {
                $scope.result = false;
            },
        async:true
        });
    };
}])

这是我的 html

<html>

<!-- Latest compiled and minified JavaScript -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>


</head>
<body ng-app="spicyApp1">
<div ng-controller="SpicyController">
 <button ng-click="chiliSpicy()">Chili</button>
 <p>The food is {{spice}} spicy!</p>
 <p ng-show="result===200" class="alert alert-warning">Your guess is higher.</p>
</div>

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.js"></script>
<script src="ajaxQuery.js"></script>
</body>
</html>

您应该避免混合使用 jQuery 方法和 AngularJS 方法。 Angular 有自己的 ajax 服务,名为 $http,您可以使用它:

myApp.controller('SpicyController', ['$scope', '$http', function($scope, $http) {
    $http.get(url + 'login?username='+user+'&password='+pwd).success(function(data) {
        $scope.result = true;
    })
}

如果您坚持使用 jQuery ajax,您可以通过向响应回调添加 $scope.$apply() 来实现:

    success: function(data)
        {
            $scope.result = true;
            $scope.$apply();
        },
    error: function (data) 
        {
            $scope.result = false;
            $scope.$apply();
        },

这需要告诉 angular 范围已更改,并且 运行 digest cycle 将检查 HTML DOM 的更改.

里面ajax调用成功,写入如下代码:

$scope.$apply(function () {
    $scope.result = true;
});`