2017-05-24 39 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

相关问题