我有一个生成对服务器的ajax调用的函数:
function askServer(callback) = {
$.ajax({
// ...
async: true, //I have to use true here
success: function(response) {
callback(response); //callback handle server response
},
});
};
处理服务器响应的功能:
function handleResponse(){
var dataObject;
askServer(function(response){
//response is an object {car:{id:2, name:TOYOTA}}
dataObject=response.car;
});
//Now, I would like to access the dataObject outside callback function
//but if I make it like this, the dataObject value will be null because it is outside the callback
}
如上所述,如何访问dataObject
外部回调函数? (dataObject
包含服务器响应数据)
我必须使用async: true
,我知道如果我使用 async:false ,我可以解决问题。
答案 0 :(得分:2)
var dataObject;
function handleResponse() {
askServer(function(response) {
dataObject = response.car;
});
}
答案 1 :(得分:2)
这是分配回调返回值 AFTER 的问题。以前做任何尝试只会导致“未定义”的怪癖。
解决方案:在.ajax调用之外定义您的函数,然后在.ajax成功函数中 - 调用您定义的函数 PASSING 返回的数据。
如果这不是您要找的,请告诉我们您是如何解决问题的。此外,您的代码有点混乱,并且您的函数(响应)中有逗号。如果你有原始问题的解决方案,也许你可以清理它,所以其他人可以发现这篇文章更有用。
BTW - async = true是默认值;)
干杯。
答案 2 :(得分:1)
如果您“必须”执行异步调用,那么根据定义,您不知道在回调发生之前它将持续多长时间。这就是为什么首先在这种情况下使用回调概念的原因。需要对异步ajax调用的结果执行的所有处理都需要在回调(或从回调调用的其他函数)中进行。
页面上其他地方的其他函数可以测试结果是否已经进入 - 如果回调将结果存储在全局声明的变量中,那么在回调实际发生之后它显然是不可用的但是同时其他代码可以测试该变量是否为null或未定义:如果是,那么您仍在等待响应,但是如果有值,则表示响应已经发生。
答案 3 :(得分:-1)
声明
var dataObject;
作为全局级变量的函数之外。然后您可以从任何其他功能访问它。