为什么控制台会返回正确的数据,而不是浏览器?

时间:2014-03-26 14:25:09

标签: javascript jquery getjson

运行get_style_guide_version()时,控制台将返回预期的数据,但浏览器中打印的内容为undefined。那是为什么?

function get_style_guide_version() {

    var jqxhr = $.getJSON( '/package.json', function() {
    })
    .done(function(data) {
        output = data.version;
        console.log(output);
        return output;
    });

}
$( document ).ready(function() {
    document.write(get_style_guide_version());
});

4 个答案:

答案 0 :(得分:3)

代码有两个问题:

  • 该功能实际上什么都不返回。您的return语句位于ajax请求的.done()函数内。
  • 该请求是异步完成的,并且在get_style_guide_version完成之前肯定没有完成。

如果您使用document.write部分而不是console.out,它将按预期工作。

答案 1 :(得分:2)

在文档就绪功能上,您正在尝试编写运行异步进程的get_style_guide_version()的结果

因此该函数在异步返回之前完成,因此无法工作。

你应该做的是另一个手动调用的函数,它写入文档并在.done promise发生时被调用。

function get_style_guide_version() {

var jqxhr = $.getJSON( '/package.json', function() {
})
.done(function(data) {
    output = data.version;
    console.log(output);
    write(output);
});

}
$( document ).ready(function() {
document.write(get_style_guide_version());
});

function write(val){
    document.write(val);
}

function get_style_guide_version(done) {

var jqxhr = $.getJSON( '/package.json', function() {
})
.done(function(data) {
    output = data.version;
    console.log(output);
    done(output);
});

}
$( document ).ready(function() {
   document.write(get_style_guide_version(function(val){
      document.write(val);
   }));
});

答案 2 :(得分:0)

简单的答案是,它是一个异步请求,函数不会等待成功事件发生..

答案 3 :(得分:0)

当您编写return output时,您将返回done()回调。不在get_style_guide_version方法中。

您应该使用另一个回调来在浏览器中编写output