在jQuery中使用AJAX从回调中访问变量

时间:2013-03-18 11:19:52

标签: javascript jquery

代码解释了所有:

//
// … code ...
//
$.ajax({
    dataType: "json",
    url: "foo",
    success: function(data) {
        var my_data = data;
    }
});
//
// … code ...
//
console.log(my_data); // NOT in scope

如何在AJAX通话之外访问my_data?我读过可能需要关闭?我找不到任何我想要的例子。

非常感谢。

5 个答案:

答案 0 :(得分:2)

Ajax是async调用,并且可以在console.log之后触发成功,您可以从成功调用函数并将数据传递给它。

$.ajax({
    dataType: "json",
    url: "foo",
    success: function(data) {
        yourFun(data);
    }
});

function yourFun(data)
{
}

给予功能而不是成功。

$.ajax({
    dataType: "json",
    url: "foo",
    success: yourFun
});

function yourFun(data)
{
}

答案 1 :(得分:1)

一般来说,你没有。 AJAX调用是异步的,因此在jQuery.ajax()函数执行后不能立即保证值;你需要等到AJAX调用完成,并且在你尝试使用该变量之前执行success回调。

最简单的方法是在<{1}}回调中使用里面的值。如果你真的需要它在外面可用,那么把它变成一个对你所有代码都可见的变量(不一定是全局的,取决于代码的结构),并在你试图在任何代码中使用它之前检查它是否有值其他功能。

答案 2 :(得分:0)

my_data定义为全球,如下所示,

var my_data;

$.ajax({
    dataType: "json",
    url: "foo",
    success: function(data) {
        my_data = data;
    }
});
//
// … code ...
//
console.log(my_data); // NOT in scope

答案 3 :(得分:0)

全局声明my_data变量..

var my_data = data;

    $.ajax({
        dataType: "json",
        url: "foo",
        success: function(data) {
            my_data = data;
        }
    });

答案 4 :(得分:0)

使用my_data作为gloabl变量来访问ajax之外的数据。

var my_data = '';
$.ajax({
    dataType: "json",
    url: "foo",
    success: function(data) {
        my_data = data;
    }
});

console.log(my_data);