Javascript jQuery AJAX跨模块通信(模块模式)
我最近重构了javascript/jquery应用程序代码以使用模块模式 我有两个模块,比如A和B 模块B包含一个公共方法(例如,Bmethod),该方法进行jQuery AJAX JSONP调用($.AJAX),并在回调中传递响应 在模块A中,有一个对B.Bmethod()的调用,该调用带有一个回调函数来处理返回的响应 以下是模块B的定义:Javascript jQuery AJAX跨模块通信(模块模式),javascript,ajax,jquery,module-pattern,Javascript,Ajax,Jquery,Module Pattern,我最近重构了javascript/jquery应用程序代码以使用模块模式 我有两个模块,比如A和B 模块B包含一个公共方法(例如,Bmethod),该方法进行jQuery AJAX JSONP调用($.AJAX),并在回调中传递响应 在模块A中,有一个对B.Bmethod()的调用,该调用带有一个回调函数来处理返回的响应 以下是模块B的定义: var B = (function() { var obj = {}; obj.Bmethod = function(data, callback
var B = (function()
{
var obj = {};
obj.Bmethod = function(data, callback)
{
//do JSONP AJAX call
callback(response);
}
return obj;
}());
现在,这里是模块A的定义和对模块B的方法调用
var A = (function()
{
var doAjax = function(data)
{
B.Bmethod(data, function(response)
{
//Do something with the response
});
}
}());
下面是我加载模块A并开始代码执行的方式:
$(document).ready(function()
{
A.doAjax(data);
});
这里的问题是,我在Chrome和Firefox上有不同的行为。在Chrome上,根本没有执行AJAX调用。没有发送任何请求。然而,在Firefox上,我可以看到请求并得到回复,但我没有收到成功回调
如果我将所有这些代码放在模块之外,放在一个文件中,那么一切似乎都正常工作
我已经看到很多人(在StackOverflow上也是如此)成功地将模块模式与AJAX调用结合使用,但是还没有发现我做错了什么
有什么想法/解决方案吗?解决了这个问题
实际上,我在另一个文件中有一个相同AJAX请求($.AJAX)的副本。所以,当请求被提出时,我假设副本也被调用了,可能这导致了不一致性问题。然而,在Chrome上,设置断点并没有显示调用复制的迹象
现在,我删除了重复的请求,效果很好。但是,我仍然不明白为什么Chrome和Firefox之间存在不一致的行为。您是否在本地进行测试?如果是,这是一个跨来源问题。尝试在服务器上测试它,或者使用
--allow file access from files
参数启动Chrome。(在启动之前,您需要关闭所有打开的Chrome窗口)我正在本地Tomcat服务器上进行测试,响应来自支持跨域请求的web服务器。如果我根本不使用模块,我可以让它工作。i、 e如果我有$(document.ready(){}下的所有代码。这可能与我使用模块的方式有关吗?您是如何加载这些模块的?我编辑了问题中的代码,以显示我是如何加载主模块和调用方法的。