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

cem*_*ate 1 javascript ajax design-patterns coding-style angularjs

我有以下一般代码.

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)
    })
}
Run Code Online (Sandbox Code Playgroud)

基本上,这只是一个普通的AJAX调用.有个...

(1)关闭"this",以便成功函数可以访问我的对象及其状态

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

(3)我想要的一切,成功确实被AngularJS被捕获,所以这个功能解析数据,进一步,在$应用调用它包装的行为.

这有效,但我不禁想知道是否有更好的方法来实现这一目标.由于嵌套函数的数量,我每次看到它时都要考虑我正在做什么,这是正确的.

这没关系,还是有更好的推荐风格?

rob*_*phy 5

我假设这个代码块在一个角度服务,控制器或指令内.如果不是,那么手头有更广泛的问题.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();
  } );
}
Run Code Online (Sandbox Code Playgroud)

这里要记住的重要一点是javascript使用函数作用域,而不是块作用域.只要一个对象存在于同一个函数中,它就被认为是"在范围内".由于值的大小this取决于上下文,您可以将其添加到变量(self)中,并确信该值是您所期望的值.