很抱歉,如果这是重复但我在之前的帖子中找不到任何令人满意的答案。
$(function() {
$.ajax({
url: 'ajax/test.html',
success: function(data) {
// Data received here
}
});
});
[或]
someFunction() {
return $.ajax({
// Call and receive data
});
}
var myVariable;
someFunction().done(function(data) {
myVariable = data;
// Do stuff with myVariable
});
上面的代码工作得很好。但是,这个ajax请求是在页面加载时发出的,我想稍后处理这些数据。我知道我可以在回调中包含处理逻辑,但我不想这样做。由于调用的异步性质,将响应分配给全局变量也不起作用。
在上述两种方式中,'数据'被限制在成功回调或完成回调中,如果可能的话我想在这些之外访问它。以前可以使用jQuery' async:false'标志,但在jQuery 1.8中不推荐使用。
任何建议都表示赞赏。谢谢。
答案 0 :(得分:3)
你可以将回调“外包”到正常的功能,所以你可以把它放在某个地方,你喜欢它:
$(function() {
$.ajax({
url: 'ajax/test.html',
success: yourOwnCallback
});
});
除此之外,你可以定义你的回调
function yourOwnCallback(data) {
// Data received and processed here
}
甚至可以使用对象方法
答案 1 :(得分:1)
这个解决方案可能不是主意,但我希望它有所帮助。
尝试:
$(document).ready(function(){
var myVar = false;
$.ajax({
url: 'ajax/test.html',
success: function(data) {
myVar=data;
}
});
someFunction(){ //this is invoked when you need processing
while(myVar==false){}
... do some other stuff ..
}
});
或者
someFunction(){
if(myVar==false){
setTimeout(someFunction(),100); //try again in 100ms
return;
}
.. do some other stuff ..
}