0

I have AJAX request and want to do my code after i get response. For it i try callback function:

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);
    }

My function:

        function intWinCreate(dateArray){
            ...some code...
            }

calling functions:

 some_function(intWinCreate(dateArray));

And i get error:

ReferenceError: dateArray is not defined

I do callback wrong? And i DONT USE jQuery.

4

2 回答 2

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);
于 2013-06-16T15:30:31.213 回答
3

您似乎误解了 AJAX 是什么。让我提醒您第一个A字母代表什么:异步。这意味着请求立即发送,Ext.Ajax.request函数立即返回。这个 AJAX 调用的结果可能要晚得多。因此,您不可能期望mydateArray在调用 AJAX 函数后立即使用它。您可以利用 AJAX 调用结果的唯一安全位置是回调本身:

Ext.Ajax.request({
    method: "POST",
    url: url_servlet+"/dateIntensityJson.jsp",
    success: function(response){
        jsonObject = JSON.parse(response.responseText);
        callback(jsonObject);
    }
});

从这个例子中你可以看到,我们在 AJAX 成功回调中调用回调,因为只有在这个函数中你的 AJAX 调用的结果才可用。

于 2013-06-16T15:31:38.307 回答