JavaScript:如何从非阻塞回调中获取数据

时间:2012-06-19 02:24:33

标签: javascript nonblocking

function getHtmlBodyFromFile( filename ){
    var outStr = '';
    $.get(filename, function(data, status) {
        outStr = $('body', $(data)).html();
    });
    return outStr;
}
$("div#detail").html( getHtmlBodyFromFile('OEBPS/text/section0002.xhtml') ); //blank

返回outStr为空,因为函数在调用$ .get()后立即返回 你能否建议我使用有效数据返回那些非阻塞风格的更好方法。 非常感谢你

4 个答案:

答案 0 :(得分:3)

不要期望从getHtmlBodyFromFile函数返回数据,而是将回调函数传递给getHtmlBodyFromFile,这应该在ajax调用之后执行。

这样的事情:

function getHtmlBodyFromFile( filename, callback ){
    var outStr = '';
    $.get(filename, function(data, status) {
        outStr = $('body', $(data)).html();
                callback(outStr)
    });
    //return outStr;
}
getHtmlBodyFromFile('OEBPS/text/section0002.xhtml', function(data) {
    $("div#detail").html(data);
});

答案 1 :(得分:1)

您可以使用.load,这将非常简单,允许您指定要插入的远程文档的一部分。

$("div#detail").load('OEBPS/text/section0002.xhtml body');

PS: 如果您使用ID选择器,则不需要$('div#detail'),只需$('#detail')就会更好。通过id查询dom是快捷方式。

答案 2 :(得分:0)

http://api.jquery.com/jQuery.get/

在使用success

时使用$.get()回调

答案 3 :(得分:0)

您还可以考虑使用.load()

$('div#detail').load('OEBPS/text/section0002.xhtml', function(response, status) {
    $(this).html($('body', $(response)));
});

或者,您可以通过在URL后面添加' body'来加载所需的片段,但是通过回调,您可以选择检查响应状态。