这是一个神奇的代码:
function() {
var result='';
for (var key in TRAINER_STEPS){
if (TRAINER_STEPS.hasOwnProperty(key)) {
$.get('steps/trainer.step.'+key+'.html')
.done(function(data) {
console.log(data); // HERE DATA IS VALID HTML DATA
result += '<div '+(key == TRAINER_DEFAULT_STEP ? 'class="hiddenStep"' : 'class="currentStep"')+' data-step="'+key+'">'+data+'</div>\n'; // AND HERE NOTHING HAPPEND
})
.fail(function(jqxhr, settings, exception) {
console.log("[el5s] Load step steps/trainer.step."+key+".html failed. Error: "+exception);
});
}
}
console.log(result); // EMPTY HERE
return result;
}
$。工作正常,数据收到正确,但我的函数返回完全空结果。看看我的评论。怎么了?
答案 0 :(得分:0)
您的计划的设计需要重新考虑。通常,您需要做的是将函数拆分为三个不同的函数:在AJAX调用之前发生的部分,在AJAX调用成功时发生的部分,以及在AJAX调用不成功时发生的部分
而不是这个伪代码过程:
function doSomething() {
// code to do whatever
var data = getDataFromWebService();
// code to work with the data
}
使用这个:
function doSomething() {
// code to do whatever
$.get('steps/trainer.step.'+key+'.html')
.done(onSuccess)
.fail(onFailure);
}
function onSuccess() {
// code to work with the data
}
function onFailure() {
// code to respond to a web service that is down whatever
}