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