调用函数时获取未定义

时间:2012-12-19 19:08:54

标签: javascript

我有这个解析JSON的函数。当我在.live函数中调用它时,我得到了未定义。

这是我创建的功能

function getAbc() {
                    var details;
                    var id = $(this).attr('data-id');
                    $.ajax({
                        url : '/index.php/data',
                        type : 'GET',
                        data : 'persons[]=' + id,
                        success : function(data, textStatus, xhr) {
                            details = JSON.parse(data);
                        },
                    });
                    return details;
                }

我只是这样打电话,getAbc()。有什么方法可以访问函数中的详细信息变量吗?

3 个答案:

答案 0 :(得分:2)

使用延续传递样式。 $.ajax本质上是异步的。

function getAbc(callback) {
    var details;
    var id = $(this).attr('data-id');
    $.ajax({
       url : '/index.php/data',
       type : 'GET',
       data : 'persons[]=' + id,
       success : function(data, textStatus, xhr) {
           details = JSON.parse(data);
           callback(details);
       }
    });
}

function getAbc(function (details) {
    console.log(details);
});

答案 1 :(得分:1)

那是因为ajax发生异步。这意味着getAbc在调用 success之前返回,因为请求通过网络传递。您需要在details回调中使用success,而不是在getAbc方法返回后使用success。或者,在details中调用另一个使用详细信息的方法,并将{{1}}传递给该方法。

答案 2 :(得分:1)

这是由于AJAX的工作方式。

AJAX请求是异步的,这意味着它们不会立即返回。

当您进行AJAX调用时,会发出一个在未知时间完成的请求。

您可以使用回调函数来处理结果。

回调函数是一个执行 AFTER 从AJAX请求收到响应的函数。

您可以指定回调函数并将其传递给您的AJAX调用。