【发布时间】:2013-07-17 07:09:29
【问题描述】:
我认为我使用的是非常标准的设置。单击元素以调用处理 ajax 请求的函数。
在使用异步任何东西并试图弄清楚jQuery deferreds 时,我对变量范围和回调的有限理解让我微弱的大脑受伤。
$('<div>')
.on({
click : function(){
console.log(
fetchMyData() // this will be 'undefined' but why?
)
}
})
function fetchMyData(){
$.ajax({
// ajax setup
})
.done(function(response){
console.log( response ); // shows 'hello' as expected
return response;
})
}
我知道 ajax 调用不一定会在我执行 console.log() 时完成,因为它当然是异步的。
那么我怎样才能让fetchMyData() 准备好后显示 ajax 结果?
【问题讨论】:
-
你想做什么?
fetchMyData()记录为undefined因为它不返回任何内容。你有什么理由避免.done()? -
返回
done回调中的任何内容实际上什么都不做。您可以在fetchMyData函数中使用return $.ajax({...。然后在您的点击处理程序中,使用fetchMyData.done(function() { console.log("foo"); }); -
将显示结果的代码放在您的 return 语句当前所在的位置...
标签: javascript jquery jquery-deferred jqxhr