Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自服务器的AngularJS绑定响应未在视图中更新_Javascript_Jquery_Ajax_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 来自服务器的AngularJS绑定响应未在视图中更新

Javascript 来自服务器的AngularJS绑定响应未在视图中更新,javascript,jquery,ajax,angularjs,angularjs-scope,Javascript,Jquery,Ajax,Angularjs,Angularjs Scope,我正在开发一个移动应用程序。我在尝试在视图中中继ajax调用后从服务器返回的消息时遇到问题。其想法是在用户单击“刷新”按钮后在视图中显示消息 装订工作不完全如我所希望的那样。它不会向用户显示当前消息,而是显示上次单击刷新按钮时收到的消息。因此,用户在加载视图后第一次单击按钮时,不会发生任何事情。。。我不明白为什么视图更新不是即时的,而是在用户再次单击时才更改 以下是我的代码的简化版本: HTML: 我知道,自从视图更新以来,ajax调用每次都是成功的,但比应该更新的时间晚了一步。提前谢谢你的帮助

我正在开发一个移动应用程序。我在尝试在视图中中继ajax调用后从服务器返回的消息时遇到问题。其想法是在用户单击“刷新”按钮后在视图中显示消息

装订工作不完全如我所希望的那样。它不会向用户显示当前消息,而是显示上次单击刷新按钮时收到的消息。因此,用户在加载视图后第一次单击按钮时,不会发生任何事情。。。我不明白为什么视图更新不是即时的,而是在用户再次单击时才更改

以下是我的代码的简化版本:

HTML:


我知道,自从视图更新以来,ajax调用每次都是成功的,但比应该更新的时间晚了一步。提前谢谢你的帮助

当然!你必须使用角度服务


阅读文章。

ajax调用完成后没有摘要周期,因此视图不会得到更新。如果您使用
$http
服务而不是
$.ajax
。然后视图将得到更新

代码如下所示:

$http({method: 'GET', url: '/someUrl'}).
    success(function(data, status, headers, config) {
        window.localStorage.setItem('content', data);
        $scope.rec = data;
    }).
    error(function(data, status, headers, config) {
      ...
    });

当然,您必须将
$http
注入控制器。

为了进行http调用,理想情况下,您需要为此类场景创建一个工厂。默认情况下,实现http的工厂将返回一个承诺,您可以根据该承诺更新范围变量

factory的语法为:

myapp.factory('getHttpData',function($http){
    return{
        getData: function(){
            return $http.get('/urlA');
        }
    }
});
在控制器中:

.controller('testCtrl',['getHttpData',function(getHttpData){
       getHttpData.getData().then(function(data){
              $scope.rec = data;//Whatever you want to store in this variable
       });
  });

您可以在success中使用$scope.$apply()使其在当前情况下工作,否则您应该使用$httpWhat@AjayBeniwal说的,但我要再次强调,您应该使用$http而不是ajax。谢谢大家的建议。这确实是问题所在!
myapp.factory('getHttpData',function($http){
    return{
        getData: function(){
            return $http.get('/urlA');
        }
    }
});
.controller('testCtrl',['getHttpData',function(getHttpData){
       getHttpData.getData().then(function(data){
              $scope.rec = data;//Whatever you want to store in this variable
       });
  });