0

この関数をモジュールパターンを明らかにするように書きましたが、コンソールでgetメソッドを呼び出すと、コンソールmetadataModule.get();にエコーundefinedされます。

var metadataModule = function () {
    var metadataurl = 'http://farskids326.com/data.json';

    function getMetadata() {
        console.log("Metadata Function Called")
        $.ajax({
            url: metadataurl,
            dataType: "json",
            success: function (data) {
                console.log(data);
            }
        });
    }
    return {
        get: getMetadata,
    };
}();

このコードのどこで間違いを犯しましたか?

4

2 に答える 2

0

コンソールで作業している場合、最後の式の戻り値はコマンドの後にエコーされます。使用しているメソッドには、明示的な戻り値がありません。だから、それがあなたが見る理由かもしれませんundefined

これはおそらく、ajax呼び出しでエラーが発生していることを意味します。次のように、成功またはエラーが発生したときにログに記録するように変更してみてください。

$.ajax({ 
  url: metadataurl , 
  dataType: "json", 
  success: function(data){
    console.log('called success!');
  },
  error: function(jqXHR, textStatus, errorThrown){
    console.log('called error!');
  }
});

次に、コードを実行すると、実行されているコールバックが正確に表示されます。うまくいけば、それはあなたに問題をデバッグするための良い出発点を与えるでしょう。

于 2013-03-22T08:11:31.800 に答える
0

getMetadata 関数は何も返さないので、はい、undefined を出力します。JSONのコンテンツで応答するには、ajax呼び出しを同期させ、取得した値を返す必要があります。

var metadataModule = function () {
   var metadataurl = 'http://farskids326.com/data.json';

   function getMetadata() {
       console.log("Metadata Function Called")
       var content = {}
       $.ajax({
           url: metadataurl,
           async : false,
           dataType: "json",
           success: function (data) {
               content = data;
           }
       });
       return content
   }
   return {
       get: getMetadata,
   };
}();
于 2013-03-22T08:18:00.187 に答える