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对象(这是一个jQuery
promise

回调版本:

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对象(这是一个jQuery
promise
)。