Javascript 变量无法在ajax函数中获得正确的值
我有以下功能:Javascript 变量无法在ajax函数中获得正确的值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下功能: function sendDocument( objektnummer, id ) { var url = $( "#objectdata" ).data( "url-send" ); var data = {}; data["objektnummer"] = objektnummer; data["id"] = parseInt(id); var result = false; $.ajax({
function sendDocument( objektnummer, id )
{
var url = $( "#objectdata" ).data( "url-send" );
var data = {};
data["objektnummer"] = objektnummer;
data["id"] = parseInt(id);
var result = false;
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "json"
})
.done(function(resp){
console.log("send ajax was successfull");
result = true;
})
.error(function(resp){
console.log("no connection");
result = false;
});
console.log(result);
return result;
}
在控制台中,我得到了肯定的消息“send ajax was successful”,但当我将函数末尾的结果打印到控制台时,我看到变量result的值为
false
当ajax操作是异步的时,您无法从函数返回值。该函数在设置return=true
之前很久就返回了。传递回调,或返回Ajax对象(这是一个jQuerypromise
)
回调版本:
function sendDocument( objektnummer, id, callMeWhenDone )
{
var url = $( "#objectdata" ).data( "url-send" );
var data = {};
data["objektnummer"] = objektnummer;
data["id"] = parseInt(id);
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "json"
})
.done(function(resp){
console.log("send ajax was successfull");
callMeWhenDone(true);
})
.error(function(resp){
console.log("no connection");
callMeWhenDone(false);
});
}
通过回调调用:
sendDocument( objektnummer, id, function(success){
if (success){
// Do this!
}
} );
本例中的promise
版本如下所示:
function sendDocument( objektnummer, id )
{
var url = $( "#objectdata" ).data( "url-send" );
var data = {};
data["objektnummer"] = objektnummer;
data["id"] = parseInt(id);
return $.ajax({
type: "POST",
url: url,
data: data,
dataType: "json"
})
.done(function(resp){
console.log("send ajax was successfull");
})
.error(function(resp){
console.log("no connection");
});
}
我们会这样称呼他:
sendDocument( objektnummer, id ).done(function(){
// Do this!
} ).fail(function(){
// Something went wrong!
});
使用Promission,您可以注册任意次数的事件(因此被认为比回调更灵活)当Ajax操作是异步的时,您不能从函数返回值。该函数在设置
return=true
之前很久就返回了。传递回调,或返回Ajax对象(这是一个jQuerypromise
)。