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 函数什么都不返回,所以是的,它将输出未定义的。要让它响应 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 回答