如何从ajax.done()获取数据?

时间:2012-10-24 20:22:38

标签: php javascript jquery html ajax

我有以下功能:

$.ajax({
    url: "../../getposts.php"
}).done(function(posts) { 
    var postsjson = $.parseJSON(posts);
});

如何在postsjson函数之外使用变量.done(),或者如何将其声明为全局?

我无法将它传递给另一个函数,因为我想稍后使用该数组,而不是在完成ajax时。

3 个答案:

答案 0 :(得分:5)

如果你只是在ajax调用之外定义变量:

var postsjson;

$.ajax({
    url: "../../getposts.php"
}).done(function(posts) { 
    postsjson = $.parseJSON(posts);
});

然后你可以在外面使用它。同样,如果您离开var,它将全局声明,但不建议这样做。

正如SLaks所指出的那样,您无法立即使用从AJAX调用中获得的数据,您需要等待done函数运行才能将其初始化为任何有用的东西。

答案 1 :(得分:3)

很酷的是,从Ajax函数返回的promise可以以多种不同的方式使用,这里有一些:

var XHR = $.ajax({
    url: "../../getposts.php"
});


function somethingElse() {
    XHR.done(function(posts) { 
       var postsjson = $.parseJSON(posts);
    });
}

-

function myAjax(url) {
    return $.ajax({
        url: url
    });
}

function doSomething(url) {
    var postsjson = myAjax(url).done(parsePosts);
}

function parsePosts() {
     return $.parseJSON(posts);
}

doSomething("../../getposts.php");

等...

答案 2 :(得分:1)

你需要在调用ajax之前声明一个变量。

简单样本:

var postsjson;

$.ajax({
    url: "../../getposts.php"
}).done(function(posts) { 
    postsjson = $.parseJSON(posts);
});

console.info(postsjson); // Use here for example