2017-05-24 80 views
0

我需要一些幫助我的JavaScript代碼。我剛剛開始使用命名空間,並且遇到了一個我無法解決的問題。從名稱空間ajax函數中的另一個命名空間的JavaScript訪問函數回調

我有兩個文件data.jsthemes.js上分別各數據和主題命名空間。 在數據的命名空間我有一個函數來執行一個Ajax調用是這樣的:

var data = data || {};data = { 
    get_companies: function (id) { 
     $.ajax({ 
      //blah blah blah 
     }); 
    } 
} 

,並在主題命名空間,我有這樣的功能:

var themes = themes || {}; 
themes = { 
    themeAdd: function() { 
    //blah blah 
     $.ajax({ 
      //blah blah 
      success: function (data) { 
       data.get_companies('#someid'); 
      } 
     }); 
    } 
} 

的問題是,雖然我可以訪問data.get_companies from themes.js文件和控制檯,當我嘗試在ajax回調中調用它時,它會產生一個錯誤(data.get_companies不是函數)。我怎樣才能解決這個問題,爲什麼我不能在Ajax回調中訪問這個函數?

+0

首先你themes.js然後data.js,讓看? Hierachy事件 –

+0

英語不是我的主要語言,但我加載他們是這樣的: 如果這是什麼你的意思是。這兩個附加點擊處理程序,所以他們都在通話時間加載 –

+0

明白了 - 改變它然後嘗試 –

回答

1

在你的Ajax success回調改變傳遞給它的參數的名稱:

$.ajax({ 
    //blah blah 
    success: function (response) { 
     data.get_companies('#someid'); 
    } 
}; 

在你定義一個名爲data的arument一個匿名函數的時刻,所以這個函數內部data是什麼已收到通過AJAX請求,而不是您的全球data對象。

您也可以嘗試訪問這樣的:

$.ajax({ 
    //blah blah 
    success: function (data) { 
     window.data.get_companies('#someid'); 
    } 
}; 
+0

的作品就像魅力!!!要更好地理解這是由ajax參數和命名空間之間的命名衝突造成的? –

+0

總之,是的.. – strah

相關問題