5

我有以下功能:

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

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

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

4

3 回答 3

5

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

var postsjson;

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

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

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

于 2012-10-24T20:24:30.370 回答
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");

ETC...

于 2012-10-24T20:38:34.813 回答
1

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

简单示例:

var postsjson;

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

console.info(postsjson); // Use here for example
于 2012-10-24T20:26:55.227 回答