我无法将从$ .post()函数检索到的数据传递到我的代码中的其他位置。我想将数据保存为变量,并在post()函数之外使用它。这是我的代码:
var last_update = function() {
$.post('/--/feed',
{func:'latest', who:$.defaults.login},
function($j){
_j = JSON.parse($j);
alert(_j.text); // This one works
});
}
alert(_j.text); // This one doesn't
};
last_update(); //run the function
请帮忙!
答案 0 :(得分:3)
$.post()
AJAX调用是异步的 - 这意味着AJAX请求是通常程序执行的无序顺序,而在程序中这意味着在填充_j之前调用第二个警报。执行顺序是:
将使用AJAX返回数据的代码移动到success()
函数(这是你的返回函数function($j)
) - 成功函数的用途。
$.post()
是对$.ajax()
的别名来电 - 完整文档here。
答案 1 :(得分:1)
如果要访问ajax请求回调之外的数据值,则需要将该代码放在函数中,并从成功回调中调用它。
var last_update = function() {
$.post('/--/feed',
{func:'latest', who:$.defaults.login},
function($j){
_j = JSON.parse($j);
alert(_j.text); // This one works
someOtherFunc(_j.text);
});
}
};
last_update(); //run the function
function someOtherFunc(val) {
alert(val)
}
基本上与将代码放在回调中相同,但如果你有一些代码可以在其他地方重复使用,那么它会非常有用。
答案 2 :(得分:0)
您可以使POST请求同步并具有全局_j变量:
// global!!!
var _j;
$.ajax({
async: false,
url: '/--/feed',
data: { func:'latest', who:$.defaults.login },
success: function($j) {
_j = JSON.parse($j);
alert(_j.text); // This one works
}
});
function last_update() {
if (typeof _j != 'undefined') {
alert(_j);
}
}
或者您可以从成功回调中调用last_update(),从而不再需要异步:
$.ajax({
url: '/--/feed',
data: { func:'latest', who:$.defaults.login },
success: function($j) {
_j = JSON.parse($j);
alert(_j.text); // This one works
last_update(_j);
}
});
function last_update(_j) {
alert(_j);
}
答案 3 :(得分:-1)
在_j
函数范围内创建last_update
。