我使用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;
}
没有运气。怎么做正确?我知道我可以将异步设置为假,但它不是正确的方式"。
答案 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);
});