2017-05-04 56 views
-1

我有一个JS模块和两个功能。第一个函数应该执行ajax请求并调用模块的第二个函数。所以我设置了context=thisjQuery的成功数据是未定义的(与上下文:这)

return BaseController.extend(...) { 
    ... 
    loadChart: function() { 
     ... 
     $.ajax({ 
      url:..., 
      data:...., 
      async: false, 
      context: this, 
      success: function(data) { 
       try { 
        for (var i = 0; i < data.d.length; i++) { 
         // do something with data 
        } 

        this.function2(); 
       } catch() { 
        .... 
       } 
      } 
     }); 
    }, 

    function2: function() { 
     // do something... 
    } 
} 

function2呼叫工作正常,但data是不确定的。为什么? 如果我删除了context声明,我的data已定义,但我不能拨打function2 ...因此,哪里做错了?谢谢。 我想我不太明白范围尚未...

+0

恕我直言,这一定是观测误差。设置'context'选项对传递给'success'函数的内容没有任何影响。 –

+0

尝试在代码的不同部分放置一些console.log(this),你应该能够调试。 –

+0

@FreemanLambda:我有。如上所述,只要我使用'context:this',我就不能使用数据对象。我不知道它是否与“openUI5”框架有关...... – Tobias

回答

-1

你可以尝试这样的:

loadChart: function() { 
    ... 
    var that = this; 
    $.ajax({ 
     url:..., 
     data:...., 
     async: false, 
     success: function(data) { 
      try { 
       for (var i = 0; i < data.d.length; i++) { 
        // do something with data 
       } 

       that.function2(); 
      } catch() { 
       .... 
      } 
     } 
    }); 
}, 

function2: function() { 
    // do something... 
} 

}

+0

这里可以通过使用该变量访问外部函数的上下文。所以你可以使用这两种功能,你到底想要做什么? – hvs9