【问题标题】:Angular Service lose value after success ajax成功ajax后Angular Service失去价值
【发布时间】:2015-09-25 11:31:43
【问题描述】:

这段代码有什么问题? 如果在 ajax 成功函数之外使用,var“acc”将失去价值。 “AppendUser”方法只是推送对象用户。 它在整个项目中运行良好,但在这种情况下它正在失去价值。为什么?

  $.ajax({
    url: url,
    data: { user_id: user_id },
    dataType: "json",
    success:function(user) {
      UserService.resetUser();
      UserService.appendUser(
                            user[0].user_id,
                            user[0].firstname
                            );

    }
  });
    acc = UserService.getUser();
    console.log(acc);

编辑: 似乎问题在于在它附加值的同一控制器内使用该服务。如果我在这个控制器中附加值并在另一个控制器中获取值,它就可以工作。但是我如果尝试获取附加在同一个控制器中的值,它会返回空对象。为什么?

【问题讨论】:

  • 你为什么使用 ajax 和 angular。您可以使用 $http 服务...
  • 它是什么类型的请求,为什么你首先使用 ajax?最简单的方法是 $http 服务docs.angularjs.org/api/ng/service/$http
  • 嗨,我是 AngularJS 的新手。当我使用 angular+jquery 时,我使用了 ajax。请求没问题。如果我在成功函数中使用 getUser() 方法,则数据正常。但在外面,它正在失去价值。有人知道为什么吗?谢谢

标签: javascript jquery ajax angularjs onsen-ui


【解决方案1】:

您可以使用 $http 服务中内置的 Angular 而不是使用 $.ajax,这是官方文档的 link

// Simple POST request example (passing data) :
$http.post('/someUrl', {msg:'hello word!'}).
  then(function(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

对于您的应用程序,您可以在服务上使用类似的东西

var deffered = $q.defer();
$http.get(url,{ params: {user_id: user_id } })
    .success(deffered.resolve).error(deffered.reject);
return deffered.promise;

【讨论】:

  • 我的问题不是请求。该请求正在返回正确的数据。感谢您的回复。
  • 但是你的实现不是最好的角度方式。 The purpose of the deferred object is to expose the associated Promise instance as well as APIs that can be used for signaling the successful or unsuccessful completion, as well as the status of the task.docs.angularjs.org/api/ng/service/$q
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
相关资源
最近更新 更多