JavaScript回调函数

时间:2013-06-16 15:29:26

标签: javascript

我有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。

2 个答案:

答案 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调用结果才可用。