2017-05-04 31 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