我可以改进这个AngularJS / AJAX javascript片段

Can I improve this AngularJS / AJAX javascript snippet?

本文关键字:AJAX javascript 片段 AngularJS 我可以      更新时间:2023-09-26

我有以下通用代码。

MyClass.prototype.doSomething = function () {
    $.ajax({
        url: turl,
        dataType: 'jsonp',
        success: function (_this) { //closure
            return function (data) {
                _this._angular_scope.$apply(function () {
                    _this.property = // extract stuff from 'data'
                    _this.analyzeContent() // do more stuff with it
                })
            }
        }(this)
    })
}
基本上,它只是一个普通的AJAX调用。有一个…

(1) "this"的闭包,这样成功函数可以访问我的对象和它的状态

(2)在里面,我返回一个对数据执行某些操作的函数,但是…

(3)我希望AngularJS能够捕捉到成功所做的一切,所以这个解析数据的函数将进一步,将它的动作封装在$apply调用中。

这是有效的,但我忍不住想知道是否有更好的方法来实现这一点。由于嵌套函数的数量,我每次查看它时都必须考虑我在做什么。

这样可以吗,还是有更好的推荐样式?

我假设这个代码块位于angular服务、控制器或指令的内部。如果不是,那么就有一个更广泛的问题。Angularjs自带了一个$http服务,可以用来代替$。ajax。$http提供与$相同的所有功能。Ajax的额外好处是它是可测试的,它集成了angularjs的摘要循环,所以你不需要担心$scope.$apply()之类的东西。我将这样做:

MyClass.prototype.doSomething = function () {
  var self = this;
  $http.get( turl ).success( function (data) {
    self.property = data.stuff;
    self.analyzeContent();
  } );
}
这里要记住的重要一点是,javascript使用函数作用域,而不是块作用域。只要对象存在于同一个函数中,它就被认为是"在作用域中"。由于this的值根据上下文而变化,您可以将其粘贴到变量(self)中,并确信该值是您期望的值。