AJAX调用后返回函数内容

时间:2015-06-03 11:24:04

标签: javascript jquery

我使用webuiPopover插件,设置popover内容,我使用的功能

$('.blob a').webuiPopover({
    template: template,
    trigger: 'hover',
    type: 'async',
    url: '/ajax/getprofileinfo.php?user=433',
    content:  function(requestData) {
          //executed after successful ajax request. 
         //How I can make another ajax call and then return everything to content?

    }
});

现在......我可以在这个回调中做任何事情。但是如果我想在这个函数中再做一个AJAX请求怎么办(在这种情况下我想下载Mustache模板,这样我就可以用requestData渲染它,然后返回函数的输出

我试过这样的事情

 content:  function(requestData) {

     var template = '';
     $.get('/tpl/usertemplate.mustache').done(function(templateData) {

         template = Mustache.render(templateData, requestData);
     });

   return template;
}

没有运气。怎么做正确?我知道我可以将异步设置为假,但它不是正确的方式"。

2 个答案:

答案 0 :(得分:1)

看看这个插件API,我无法看到你想要的方式。有async.before和async.after属性。您可以尝试使用它们,也可以尝试在第二次请求完成后手动调用setContent,例如

content:  function(requestData) {
    vat that = this;
    $.get(url).done(function (data){
        that.setContent(Mustache.render(templateData, data));
    });
}

但我不确定它是否会奏效。

答案 1 :(得分:0)

新手错误:) Javascript是异步

您的代码有什么问题:

$.get('/tpl/usertemplate.mustache').done(function(templateData) { // This is done FIRST
     template = Mustache.render(templateData, requestData); // This is done whenever the GET is finished, so... THIRD
});
return template; // This is done SECOND - At this point, template is empty.

你应该做什么:

$.get('/tpl/usertemplate.mustache').done(function(templateData) {
     template = Mustache.render(templateData, requestData);
     return template;
});

甚至更简单:

$.get('/tpl/usertemplate.mustache').done(function(templateData) {
     return Mustache.render(templateData, requestData);
});