显示模块模式方法echo undefined

时间:2013-03-22 07:53:27

标签: javascript design-patterns module

我将此函数编写为显示模块模式,但当我在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,
    };
}();

我在这段代码中哪里犯了错误?

2 个答案:

答案 0 :(得分:0)

在控制台中工作时,在任何命令之后都会回显最后一次表达式的返回值。您使用的方法没有明确的返回值。因此,这可能就是您看到undefined

的原因

这可能意味着您的ajax调用遇到错误。尝试在成功或错误发生时将其更改为日志,如下所示:

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

然后,当您运行代码时,您应该确切地看到正在执行哪个回调。希望这能为您提供调试问题的良好起点。

答案 1 :(得分: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,
   };
}();