Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery AJAX跨模块通信(模块模式)_Javascript_Ajax_Jquery_Module Pattern - Fatal编程技术网

Javascript jQuery AJAX跨模块通信(模块模式)

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

我最近重构了javascript/jquery应用程序代码以使用模块模式

我有两个模块,比如A和B

模块B包含一个公共方法(例如,Bmethod),该方法进行jQuery AJAX JSONP调用($.AJAX),并在回调中传递响应

在模块A中,有一个对B.Bmethod()的调用,该调用带有一个回调函数来处理返回的响应

以下是模块B的定义:

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(){}下的所有代码。这可能与我使用模块的方式有关吗?您是如何加载这些模块的?我编辑了问题中的代码,以显示我是如何加载主模块和调用方法的。