Javascript 值在$.ajax.done()范围外不会更改

Javascript 值在$.ajax.done()范围外不会更改,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图永久性地更改$.ajax.done()范围内的一些值,以便此范围之外的代码的其他部分可以使用它。变量duplicate是我编写的模块中的全局变量,我希望在运行done()后能够在其他函数中使用更新的布尔值 函数duplicateFile被设置为返回$.ajax({url:…})块代码 // Callback function duplicateError = function() { console.log(duplicate); // prints 'true' if a

我试图永久性地更改
$.ajax.done()
范围内的一些值,以便此范围之外的代码的其他部分可以使用它。变量
duplicate
是我编写的模块中的全局变量,我希望在运行
done()
后能够在其他函数中使用更新的布尔值

函数
duplicateFile
被设置为返回
$.ajax({url:…})块代码

// Callback function
duplicateError = function() {
        console.log(duplicate); // prints 'true' if a duplicate is found
        if (duplicate) {
            errors.create("duplicateFile");
        }
    };

// AJAX call
duplicateFile(fileData).done(duplicateError);
如果在运行AJAX调用后发现重复项,
console.log
打印
true
。但是,如果我尝试在AJAX函数调用之后调用
console.log
,如下所示,那么不管怎样,该值都是
false

duplicateFile(fileData).done(duplicateError);
console.log(duplicate); // always prints 'false'
是否有办法解决此问题,并在调用请求后永久更改
replicate
值?我知道我可以在AJAX请求中设置
async:false
,但我希望避免这样做


EDIT:
duplicate
在传递给
$中的
success
方法的回调函数中被更改。ajax({url:…})

检查:哪里是
duplicate
被更改的地方?你的代码不清楚。此行为最可能的原因是Ajax的异步性质。@puelo
duplicate
在传递给
$.Ajax({url:…})
中的
success
方法的回调函数中发生了更改。我将用它更新原始帖子。@helllomatt我在代码中使用回调,如上所示,但我不确定出了什么问题。如果我正在修改回调中的代码(设置值等),为什么它不会成为永久性的?@RishadBharucha你查看了hellomatt的链接了吗?问题在于,成功函数是在Ajax请求完成时执行的。Ajax是异步的,这意味着,
console.log
在Ajax请求完成之前执行(大多数情况下)。这不是一个值变为永久值的问题,而是一个执行顺序的问题。检查一下:哪里是
重复的
被更改的地方?你的代码不清楚。此行为最可能的原因是Ajax的异步性质。@puelo
duplicate
在传递给
$.Ajax({url:…})
中的
success
方法的回调函数中发生了更改。我将用它更新原始帖子。@helllomatt我在代码中使用回调,如上所示,但我不确定出了什么问题。如果我正在修改回调中的代码(设置值等),为什么它不会成为永久性的?@RishadBharucha你查看了hellomatt的链接了吗?问题在于,成功函数是在Ajax请求完成时执行的。Ajax是异步的,这意味着,
console.log
在Ajax请求完成之前执行(大多数情况下)。这不是价值永久化的问题,而是执行顺序的问题。