我有一个生成对服务器的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,我知道可以摆脱这个问题。
var dataObject;
function handleResponse() {
askServer(function(response) {
dataObject = response.car;
});
}
这是分配回调返回的值AFTER的问题。之前进行任何尝试只会导致“未定义”的怪癖。
解决方案:在.ajax调用之外定义函数,然后在.ajax成功函数中-调用您定义的函数PASSING返回的数据。
如果这不是您想要的,请告诉我们如何解决您的问题。另外,您的代码有点混乱,并且您的函数(响应)中带有逗号。如果您有原始问题的解决方案,也许您可以清理掉,这样其他人可以发现这个帖子更有用。
BTW-async = true是默认值;)
干杯。
如果您“必须”进行异步调用,那么根据定义,您不知道回调发生之前需要多长时间。这就是为什么在这种情况下首先使用回调概念的原因。需要对异步ajax调用的结果进行的所有处理都需要在回调中(或在从回调中调用的其他函数中)进行。
[页面上其他地方的其他函数可以测试看看结果是否还没有出现-如果回调将结果存储在全局声明的变量中,则在回调实际发生之前,它显然将不可用,但与此同时,其他代码可以测试该变量是否为null或未定义:如果为null,则您仍在等待响应,但是如果有一个值,则您知道响应已经发生。
声明
var dataObject;
在函数外部作为全局级别变量。然后,您可以从任何其他功能访问它。