1

可能重复:
如何从函数的 AJAX 调用返回响应?

我正在尝试通过 ajax 获取一些 HTML 内容。但是由于某种原因,尽管 HTML 使其成为 ajax 函数,但当我尝试将其用作返回值时,我得到undefined.

像这样:

function get_additional_options(name) {

    var post = $.ajax({
            type: 'post',
            url: 'order_queries_templates/html/' + name + '_additional_options.php?<?=time()?>',
            //data:'product_id=' + product_id,
            dataType: 'html'

            });

    post.done(function (p) {
        console.log(p); //prints out all the HTML just as I would expect
        return p;
    });
}

但是当我尝试让 HTML 像这样将其附加到我的页面时

if (has_additional_options == "t"){
    var html_to_append = get_additional_options(name);
    console.log(html_to_append); // undefined

}

如果我使用该done()方法,或者只是将值作为成功回调返回,则结果相同。我的错误是什么?

4

2 回答 2

3

您不能从异步调用的函数中返回值。

您应该返回post(即 的结果$.ajax),然后在您的函数之外.done注册一个处理程序:

function get_additional_options(name) {
    return $.ajax({
        ...
    });
};

if (has_additional_options == "t") {
     get_additional_options(name).done(function(p) {
         console.log(p);
     });
     // NB: code execution continues here immediately - don't do anything
     //     else here - all further stuff must be done in the above callback
 }
于 2013-01-31T20:25:52.817 回答
0

您正在匿名函数中返回 HTML 值。您基本上是将其传递给 post.done 方法。

也许在这种情况下使用事件会更好,因为您在这里运行异步代码。

function get_additional_options(name) {

    var post = $.ajax({
            type: 'post',
            url: 'order_queries_templates/html/' + name + '_additional_options.php?<?=time()?>',
            //data:'product_id=' + product_id,
            dataType: 'html'

            });

    post.done(function (p) {
        $("body").trigger("html_loaded",[p]);
    );
}

$("body").on("html_loaded", function (htmlData) {

    // Do something with your HTML data here.
    $(this).append(htmlData);

});
于 2013-01-31T20:22:29.477 回答