0

最近、モジュールパターンを使用するようにjavascript/jqueryアプリケーションコードをリファクタリングしました。

2つのモジュールがあります。たとえばAとBです。

モジュールBには、jQuery AJAX JSONP呼び出し($ .ajax)を作成し、コールバックで応答を渡すパブリックメソッド(たとえば、Bmethod)が含まれています。

モジュールAの内部には、返された応答を処理するためのコールバック関数を使用したB.Bmethod()の呼び出しがあります。

モジュールBの定義は次のとおりです。

var B = (function()
{
  var obj = {};
  obj.Bmethod = function(data, callback)
                {
                  //do JSONP AJAX call
                  callback(response);
                }
  return obj;
}());

ここで、モジュールBのメソッド呼び出しを使用したモジュールAの定義を示します。

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では、要求が行われたことを確認し、応答を返すこともできますが、成功のコールバックを受け取りません。

このコードをすべてモジュールの外に置いて、1つのファイルに入れると、すべてが正しく機能しているように見えます。

私は多くの人(StackOverflowでも)がAJAX呼び出しでモジュールパターンをうまく使用しているのを見てきましたが、私が間違っていることを理解することができませんでした。

アイデア/解決策はありますか?

4

1 に答える 1

0

問題を修正しました。

私は実際に、同じ AJAX リクエスト ($.ajax) の複製コピーを別のファイルに持っていました。したがって、リクエストが行われたとき、重複が(また)呼び出されていたと思います。これが不整合の問題を引き起こしている可能性があります。ただし、Chrome では、ブレークポイントを設定しても、重複が呼び出された兆候は見られませんでした。

今のところ、重複したリクエストを削除したところ、問題なく動作しています。しかし、Chrome と Firefox の動作に一貫性がなかった理由はまだわかりません。

于 2012-07-09T20:40:30.103 に答える