所以我想从一个函数中返回一个字符串,该函数会形成两个深度的AJAX调用。我可以弄清楚这样做的一种混乱方式,但我想有更好的方法来做到这一点?
function fetchAndFillTemplate(options) {
$.getJSON(options.data, {}, function(data, status) {
$.get(options.template, function(template) {
// this is the string I want to return when you call 'fetchAndFillTemplate'
var rendered_template = Mustache.to_html(template, data);
});
});
}
答案 0 :(得分:4)
您无法返回该值,因为它是异步任务。
不使用Promise的解决方法是:
function fetchAndFillTemplate(options, callback) {
$.getJSON(options.data, {}, function(data, status) {
$.get(options.template, function(template) {
// this is the string I want to return when you call 'fetchAndFillTemplate'
var rendered_template = Mustache.to_html(template, data);
callback(rendered_template);
});
});
}
如您所见,我们添加了一个新参数callback
,即function
;
那么,不要这样叫:
var tpl = fetchAndFillTemplate(options);
你必须这样做:
fetchAndFillTemplate(options, function(rendered_template){
var tpl = rendered_template;
});
希望这会有所帮助。干杯
PS:嗯,有一种方法可以通过调用ajax调用sync
来返回最终值,但我不会发布它,因为它根本不推荐(阻止UI)。