我有以下代码:
$.post( '/map/getfile' ,data)
.done(function(dataR) {
var obj = jQuery.parseJSON(dataR);
var sth = obj.number;
})
.always(function() {
})
.fail(function() {
alert( "error" );
alert( "finished" );
});
我需要代码中的'sth'变量,但是当我尝试
时console.log(sth);
我有一条错误消息,例如'variable sth is undefined'。 我做错了什么?
答案 0 :(得分:1)
调用函数并传入sth
:
$.post( '/map/getfile' ,data)
.done(function(dataR) {
var obj = jQuery.parseJSON(dataR);
var sth = obj.number;
callback(sth); // callback function that needs the sth variable
})
.always(function() {
})
.fail(function() {
alert( "error" );
alert( "finished" );
});
通常你会将帖子包装在一个函数中并将回调函数作为参数传递给它,以便它可以很容易地改变:
function getFilePost(callback) {
// above post code
}
getFilePost(function(sth) { console.log(sth); });
答案 1 :(得分:0)
您必须在您需要的范围内声明变量sth
或更高的范围,并在done
回调中设置值。但是,由于这是ajax
调用,因此在请求完成之前,您不会立即在ajax调用之外使用该值。
这应该可以帮助您相应地规划代码。
答案 2 :(得分:0)
调用.done()
中可处理结果的函数。
$.post( '/map/getfile' ,data)
.done(function(dataR) {
var obj = jQuery.parseJSON(dataR);
displayResults(obj.number);
})
.always(function() {
})
.fail(function() {
alert( "error" );
alert( "finished" );
});
var displayResults = function(sth) {
alert(sth);
};
答案 3 :(得分:0)
据我所知,你需要" sth"里面的变量总是?或者也许是在帖子本身之后?如果是这样,你可以这样做:
var sth;
$.post( '/map/getfile' ,data)
.done(function(dataR) {
var obj = jQuery.parseJSON(dataR);
sth = obj.number;
callback(sth); // callback function that needs the sth variable
})
.always(function() {
console.log(sth); // I expect "always" to be called by jQuery after "done"
})
.fail(function() {
alert( "error" );
alert( "finished" );
});
console.log(sth);
如果帖子在一个功能内部,你需要"某事物。要退回,你必须使用回调或承诺。