我有以下功能:
$.ajax({
url: "../../getposts.php"
}).done(function(posts) {
var postsjson = $.parseJSON(posts);
});
如何在postsjson
函数之外使用变量.done()
,或者如何将其声明为全局?
我无法将它传递给另一个函数,因为我想稍后使用该数组,而不是在完成ajax时。
答案 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