我有AJAX请求,并希望在得到回复后执行我的代码。为此我尝试回调功能:
AJAX
function some_function(callback) {
var mydateArray=[];
Ext.Ajax.request({
method: "POST",
url: url_servlet+"/dateIntensityJson.jsp",
success: function(response){
jsonObject = JSON.parse(response.responseText);
mydateArray = jsonObject.data;
}
});
callback(mydateArray);
}
我的功能:
function intWinCreate(dateArray){
...some code...
}
调用函数:
some_function(intWinCreate(dateArray));
我得到错误:
ReferenceError: dateArray is not defined
我回电错了吗? 而且我不使用jQuery。
答案 0 :(得分:3)
将您的callback
调用移到您传递给Ajax方法的回调中,以便在收到ajax响应后执行:
Ext.Ajax.request({
method: "POST",
url: url_servlet+"/dateIntensityJson.jsp",
success: function(response){
jsonObject = JSON.parse(response.responseText);
mydateArray = jsonObject.data;
callback(mydateArray);
}
});
现在,您在执行成功功能之前执行callback(mydateArray)
。
正如Mattias所注意到的,你似乎也没有将函数作为回调传递,而是函数调用的结果。您可能想要像这样致电some_function
:
some_function(intWinCreate);
答案 1 :(得分:3)
你似乎误解了AJAX是什么。让我提醒您第一个A
字母代表什么:异步。这意味着请求立即发送,Ext.Ajax.request
函数立即返回。这个AJAX调用的结果可能会晚得多。因此,在调用AJAX函数后,您不可能期望立即使用此mydateArray
。您可以利用AJAX调用结果的唯一安全位置是回调本身:
Ext.Ajax.request({
method: "POST",
url: url_servlet+"/dateIntensityJson.jsp",
success: function(response){
jsonObject = JSON.parse(response.responseText);
callback(jsonObject);
}
});
从这个例子可以看出,我们在AJAX成功回调中调用了回调函数,因为只有在这个函数内部,你的AJAX调用结果才可用。